From 5871affc7a94936f11918b007cd2f09f5d26d7bf Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Mon, 11 May 2015 23:17:36 +0200 Subject: http2: remove the stream from the hash in stream_close callback ... and suddenly things work much better! --- lib/http2.c | 7 ++++++- lib/url.c | 10 ---------- 2 files changed, 6 insertions(+), 11 deletions(-) (limited to 'lib') diff --git a/lib/http2.c b/lib/http2.c index ad1826d55..cfb7a0d0a 100644 --- a/lib/http2.c +++ b/lib/http2.c @@ -456,6 +456,11 @@ static int on_stream_close(nghttp2_session *session, int32_t stream_id, stream->error_code = error_code; 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; } @@ -799,7 +804,7 @@ static ssize_t http2_handle_stream_close(struct http_conn *httpc, *err = CURLE_HTTP2; return -1; } - DEBUGF(infof(data, "http2_recv returns 0\n")); + DEBUGF(infof(data, "http2_recv returns 0, http2_handle_stream_close\n")); return 0; } diff --git a/lib/url.c b/lib/url.c index 483178355..7eb1c4778 100644 --- a/lib/url.c +++ b/lib/url.c @@ -2886,16 +2886,6 @@ void Curl_getoff_all_pipelines(struct SessionHandle *data, conn->readchannel_inuse = FALSE; if(Curl_removeHandleFromPipeline(data, conn->send_pipe) && send_head) 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) -- cgit v1.2.3