aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2015-04-28 13:10:04 +0200
committerDaniel Stenberg <daniel@haxx.se>2015-05-18 08:57:17 +0200
commit77f1029ecda8ff03c3a022e67098b39408b1ac66 (patch)
tree4cbd6a054eecd403c5049f8dabe52ce30c41490c /lib
parent7957d2eb927da90d817c7d1680b5486e00fec711 (diff)
http: a stream hash for h2 multiplexing
Diffstat (limited to 'lib')
-rw-r--r--lib/http2.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/lib/http2.c b/lib/http2.c
index 9e9d86a9b..210960157 100644
--- a/lib/http2.c
+++ b/lib/http2.c
@@ -564,6 +564,11 @@ static nghttp2_settings_entry settings[] = {
#define H2_BUFSIZE 4096
+static void freestreamentry(void *freethis)
+{
+ (void)freethis;
+}
+
/*
* Initialize nghttp2 for a Curl connection
*/
@@ -625,9 +630,11 @@ CURLcode Curl_http2_init(struct connectdata *conn)
}
rc = Curl_hash_init(&conn->proto.httpc.streamsh, 7, Curl_hash_str,
- Curl_str_key_compare, NULL);
- if(rc)
+ Curl_str_key_compare, freestreamentry);
+ if(rc) {
+ failf(conn->data, "Couldn't init stream hash!");
return CURLE_OUT_OF_MEMORY; /* most likely at least */
+ }
}
return CURLE_OK;
}
@@ -965,9 +972,18 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
return -1;
}
- infof(conn->data, "Using Stream ID: %x\n", stream_id);
+ infof(conn->data, "Using Stream ID: %x (easy handle %p)\n",
+ stream_id, conn->data);
stream->stream_id = stream_id;
+ /* put the SessionHandle in the hash with the stream_id as key */
+ if(!Curl_hash_add(&httpc->streamsh, &stream->stream_id, sizeof(stream_id),
+ conn->data)) {
+ failf(conn->data, "Couldn't add stream to hash!");
+ *err = CURLE_OUT_OF_MEMORY;
+ return -1;
+ }
+
rv = nghttp2_session_send(httpc->h2);
if(rv != 0) {