mirror of
https://github.com/curl/curl.git
synced 2025-09-22 03:52:42 +03:00
http2: remove the stream from the hash in stream_close callback
... and suddenly things work much better!
This commit is contained in:
parent
3e8a5d88a5
commit
5871affc7a
|
@ -456,6 +456,11 @@ static int on_stream_close(nghttp2_session *session, int32_t stream_id,
|
||||||
|
|
||||||
stream->error_code = error_code;
|
stream->error_code = error_code;
|
||||||
stream->closed = TRUE;
|
stream->closed = TRUE;
|
||||||
|
|
||||||
|
/* remove the entry from the hash as the stream is now gone */
|
||||||
|
Curl_hash_delete(&conn->proto.httpc.streamsh,
|
||||||
|
&stream_id, sizeof(stream_id));
|
||||||
|
DEBUGF(infof(conn->data, "Removed stream %x hash!\n", stream_id));
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -799,7 +804,7 @@ static ssize_t http2_handle_stream_close(struct http_conn *httpc,
|
||||||
*err = CURLE_HTTP2;
|
*err = CURLE_HTTP2;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
DEBUGF(infof(data, "http2_recv returns 0\n"));
|
DEBUGF(infof(data, "http2_recv returns 0, http2_handle_stream_close\n"));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
10
lib/url.c
10
lib/url.c
|
@ -2886,16 +2886,6 @@ void Curl_getoff_all_pipelines(struct SessionHandle *data,
|
||||||
conn->readchannel_inuse = FALSE;
|
conn->readchannel_inuse = FALSE;
|
||||||
if(Curl_removeHandleFromPipeline(data, conn->send_pipe) && send_head)
|
if(Curl_removeHandleFromPipeline(data, conn->send_pipe) && send_head)
|
||||||
conn->writechannel_inuse = FALSE;
|
conn->writechannel_inuse = FALSE;
|
||||||
|
|
||||||
if(conn->httpversion == 20) {
|
|
||||||
/* delete this handle from the stream hash */
|
|
||||||
struct HTTP *stream = data->req.protop;
|
|
||||||
if(stream && Curl_hash_delete(&conn->proto.httpc.streamsh,
|
|
||||||
&stream->stream_id,
|
|
||||||
sizeof(stream->stream_id))) {
|
|
||||||
infof(conn->data, "Failed to remove handle from h2 stream hash!!\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void signalPipeClose(struct curl_llist *pipeline, bool pipe_broke)
|
static void signalPipeClose(struct curl_llist *pipeline, bool pipe_broke)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user