From: Stefan Eissing Date: Mon, 24 Apr 2023 10:50:44 +0000 (+0200) Subject: http2: always EXPIRE_RUN_NOW unpaused http/2 transfers X-Git-Tag: curl-8_1_0~81 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5622e431edd748452a4bdb179f45c405357f0618;p=thirdparty%2Fcurl.git http2: always EXPIRE_RUN_NOW unpaused http/2 transfers - just increasing the http/2 flow window does not necessarily make a server send new data. It may already have exhausted the window before Closes #11005 --- diff --git a/lib/http2.c b/lib/http2.c index 39b80a1bf4..726f5a64b8 100644 --- a/lib/http2.c +++ b/lib/http2.c @@ -2210,6 +2210,15 @@ static CURLcode http2_data_pause(struct Curl_cfilter *cf, if(result) return result; + if(!pause) { + /* Unpausing a h2 transfer, requires it to be run again. The server + * may send new DATA on us increasing the flow window, and it may + * not. We may have already buffered and exhausted the new window + * by operating on things in flight during the handling of other + * transfers. */ + drain_stream(cf, data, stream); + Curl_expire(data, 0, EXPIRE_RUN_NOW); + } DEBUGF(infof(data, "Set HTTP/2 window size to %u for stream %u", window, stream->id));