]> granicus.if.org Git - curl/commitdiff
http2: remove the stream from the hash in stream_close callback
authorDaniel Stenberg <daniel@haxx.se>
Mon, 11 May 2015 21:17:36 +0000 (23:17 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 18 May 2015 07:33:47 +0000 (09:33 +0200)
... and suddenly things work much better!

lib/http2.c
lib/url.c

index ad1826d5502b46a9a33d341b41c088903717eec2..cfb7a0d0ab0975bcb88b9d3f1e08f56b31039851 100644 (file)
@@ -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;
 }
 
index 4831783550b82a389b69fc5dd791f25e8d6f69ca..7eb1c4778bf0cdd560031c61c3ec66caa76b8ca8 100644 (file)
--- 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)