From: Daniel Stenberg Date: Thu, 16 Aug 2018 11:21:11 +0000 (+0200) Subject: http2: make sure to send after RST_STREAM X-Git-Tag: curl-7_61_1~51 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c7ea4ddd2e5db304bc3170eeb8d5aa91f1921013;p=curl http2: make sure to send after RST_STREAM If this is the last stream on this connection, the RST_STREAM might not get pushed to the wire otherwise. Fixes #2882 Closes #2887 Researched-by: Michael Kaufmann --- diff --git a/lib/http2.c b/lib/http2.c index e9ec73a6d..9380ca7cf 100644 --- a/lib/http2.c +++ b/lib/http2.c @@ -1146,6 +1146,9 @@ void Curl_http2_done(struct connectdata *conn, bool premature) struct HTTP *http = data->req.protop; struct http_conn *httpc = &conn->proto.httpc; + if(!httpc->h2) /* not HTTP/2 ? */ + return; + if(data->state.drain) drained_transfer(data, httpc); @@ -1166,8 +1169,10 @@ void Curl_http2_done(struct connectdata *conn, bool premature) if(premature) { /* RST_STREAM */ - nghttp2_submit_rst_stream(httpc->h2, NGHTTP2_FLAG_NONE, http->stream_id, - NGHTTP2_STREAM_CLOSED); + if(!nghttp2_submit_rst_stream(httpc->h2, NGHTTP2_FLAG_NONE, + http->stream_id, NGHTTP2_STREAM_CLOSED)) + (void)nghttp2_session_send(httpc->h2); + if(http->stream_id == httpc->pause_stream_id) { infof(data, "stopped the pause stream!\n"); httpc->pause_stream_id = 0;