Skip to content

Commit

Permalink
http2: check nghttp2_session_set_stream_user_data return code
Browse files Browse the repository at this point in the history
Might help bug #2688 debugging

Closes #2880
  • Loading branch information
bagder committed Aug 15, 2018
1 parent 3001304 commit ac86eab
Showing 1 changed file with 32 additions and 7 deletions.
39 changes: 32 additions & 7 deletions lib/http2.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"));
Expand Down Expand Up @@ -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;

Expand All @@ -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;
}
Expand Down Expand Up @@ -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;
}
}
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit ac86eab

Please sign in to comment.