diff options
author | Daniel Stenberg <daniel@haxx.se> | 2015-05-11 23:17:36 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2015-05-18 09:33:47 +0200 |
commit | 5871affc7a94936f11918b007cd2f09f5d26d7bf (patch) | |
tree | 004bb734c041fb34ea5100cc82324c5d79927866 | |
parent | 3e8a5d88a5fe99a15a2c89aca8aca30d36243be9 (diff) |
http2: remove the stream from the hash in stream_close callback
... and suddenly things work much better!
-rw-r--r-- | lib/http2.c | 7 | ||||
-rw-r--r-- | lib/url.c | 10 |
2 files changed, 6 insertions, 11 deletions
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; } @@ -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) |