diff options
author | Daniel Stenberg <daniel@haxx.se> | 2018-08-14 15:28:29 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2018-08-15 23:03:22 +0200 |
commit | ac86eabdbeef84c27f3351e1f72903552d9fb851 (patch) | |
tree | 9d6d44184389988b940228b576d94ecf4907fb27 /lib | |
parent | 3001304ad119d2547148da7cff1444fb06df88b6 (diff) |
http2: check nghttp2_session_set_stream_user_data return code
Might help bug #2688 debugging
Closes #2880
Diffstat (limited to 'lib')
-rw-r--r-- | lib/http2.c | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/lib/http2.c b/lib/http2.c index 1750dd357..e9ec73a6d 100644 --- a/lib/http2.c +++ b/lib/http2.c @@ -567,8 +567,15 @@ static int push_promise(struct Curl_easy *data, } httpc = &conn->proto.httpc; - nghttp2_session_set_stream_user_data(httpc->h2, - frame->promised_stream_id, newhandle); + rv = nghttp2_session_set_stream_user_data(httpc->h2, + frame->promised_stream_id, + newhandle); + if(rv) { + infof(data, "failed to set user_data for stream %u\n", + frame->promised_stream_id); + DEBUGASSERT(0); + goto fail; + } } else { H2BUGF(infof(data, "Got PUSH_PROMISE, ignore it!\n")); @@ -844,6 +851,7 @@ static int on_stream_close(nghttp2_session *session, int32_t stream_id, struct Curl_easy *data_s; struct HTTP *stream; struct connectdata *conn = (struct connectdata *)userp; + int rv; (void)session; (void)stream_id; @@ -869,8 +877,14 @@ static int on_stream_close(nghttp2_session *session, int32_t stream_id, httpc->error_code = error_code; /* remove the entry from the hash as the stream is now gone */ - nghttp2_session_set_stream_user_data(session, stream_id, 0); + rv = nghttp2_session_set_stream_user_data(session, stream_id, 0); + if(rv) { + infof(data_s, "http/2: failed to clear user_data for stream %u!\n", + stream_id); + DEBUGASSERT(0); + } H2BUGF(infof(data_s, "Removed stream %u hash!\n", stream_id)); + stream->stream_id = 0; /* cleared */ } return 0; } @@ -1160,7 +1174,13 @@ void Curl_http2_done(struct connectdata *conn, bool premature) } } if(http->stream_id) { - nghttp2_session_set_stream_user_data(httpc->h2, http->stream_id, 0); + int rv = nghttp2_session_set_stream_user_data(httpc->h2, + http->stream_id, 0); + if(rv) { + infof(data, "http/2: failed to clear user_data for stream %u!\n", + http->stream_id); + DEBUGASSERT(0); + } http->stream_id = 0; } } @@ -2175,9 +2195,14 @@ CURLcode Curl_http2_switched(struct connectdata *conn, return CURLE_HTTP2; } - nghttp2_session_set_stream_user_data(httpc->h2, - stream->stream_id, - conn->data); + rv = nghttp2_session_set_stream_user_data(httpc->h2, + stream->stream_id, + data); + if(rv) { + infof(data, "http/2: failed to set user_data for stream %u!\n", + stream->stream_id); + DEBUGASSERT(0); + } } else { populate_settings(conn, httpc); |