curl: add yet another patch for the same issue

This commit is contained in:
Vladimír Čunát 2023-02-16 20:43:50 +01:00
parent 74f6aaae4a
commit c6dcda71cb
No known key found for this signature in database
GPG Key ID: E747DF1F9575A3AA

@ -60,3 +60,42 @@ index 46fc746457726..1ef5d3949218f 100644
nread = retlen;
DEBUGF(LOG_CF(data, cf, "[h2sid=%u] cf_h2_recv -> %zd",
stream->stream_id, nread));
From 87ed650d04dc1a6f7944a5d952f7d5b0934a19ac Mon Sep 17 00:00:00 2001
From: Harry Sintonen <sintonen@iki.fi>
Date: Thu, 16 Feb 2023 06:26:26 +0200
Subject: [PATCH] http2: set drain on stream end
Ensure that on_frame_recv() stream end will trigger a read if there is
pending data. Without this it could happen that the pending data is
never consumed.
This combined with https://github.com/curl/curl/pull/10529 should fix
https://github.com/curl/curl/issues/10525
Ref: https://github.com/curl/curl/issues/10525
Closes #10530
---
lib/http2.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/lib/http2.c b/lib/http2.c
index 1ef5d3949218f..bdb5e7378e9cb 100644
--- a/lib/http2.c
+++ b/lib/http2.c
@@ -868,6 +868,14 @@ static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame,
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
}
+ if(frame->hd.flags & NGHTTP2_FLAG_END_STREAM) {
+ /* Stream has ended. If there is pending data, ensure that read
+ will occur to consume it. */
+ if(!data->state.drain && stream->memlen) {
+ drain_this(cf, data_s);
+ Curl_expire(data, 0, EXPIRE_RUN_NOW);
+ }
+ }
break;
case NGHTTP2_HEADERS:
DEBUGF(LOG_CF(data_s, cf, "[h2sid=%u] recv frame HEADERS", stream_id));