aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2015-05-11 23:17:36 +0200
committerDaniel Stenberg <daniel@haxx.se>2015-05-18 09:33:47 +0200
commit5871affc7a94936f11918b007cd2f09f5d26d7bf (patch)
tree004bb734c041fb34ea5100cc82324c5d79927866
parent3e8a5d88a5fe99a15a2c89aca8aca30d36243be9 (diff)
http2: remove the stream from the hash in stream_close callback
... and suddenly things work much better!
-rw-r--r--lib/http2.c7
-rw-r--r--lib/url.c10
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;
}
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)