mirror of
https://github.com/curl/curl.git
synced 2026-08-25 01:13:32 +03:00
http2: Ensure that http2_handle_stream_close is called
This commit ensures that streams which was closed in on_stream_close callback gets passed to http2_handle_stream_close. Previously, this might not happen. To achieve this, we increment drain property to forcibly call recv function for that stream. To more accurately check that we have no pending event before shutting down HTTP/2 session, we sum up drain property into http_conn.drain_total. We only shutdown session if that value is 0. With this commit, when stream was closed before reading response header fields, error code CURLE_HTTP2_STREAM is returned even if HTTP/2 level error is NO_ERROR. This signals the upper layer that stream was closed by error just like TCP connection close in HTTP/1. Ref: https://github.com/curl/curl/issues/659 Ref: https://github.com/curl/curl/pull/663
This commit is contained in:
parent
b5f82148f5
commit
86c633a893
2 changed files with 39 additions and 19 deletions
|
|
@ -214,6 +214,7 @@ struct http_conn {
|
|||
them for both cases. */
|
||||
int32_t pause_stream_id; /* stream ID which paused
|
||||
nghttp2_session_mem_recv */
|
||||
int drain_total; /* sum of all stream's UrlState.drain */
|
||||
|
||||
/* this is a hash of all individual streams (SessionHandle structs) */
|
||||
struct h2settings settings;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue