http2: Ensure that http2_handle_stream_close is called
Previously, when HTTP/2 is enabled and used, and stream has content length known, Curl_read was not called when there was no bytes left to read. Because of this, we could not make sure that http2_handle_stream_close was called for every stream. Since we use http2_handle_stream_close to emit trailer fields, they were effectively ignored. This commit changes the code so that Curl_read is called even if no bytes left to read, to ensure that http2_handle_stream_close is called for every stream. Discussed in https://github.com/bagder/curl/pull/564
This commit is contained in:
parent
325686ef9e
commit
b019af41e7
@ -410,7 +410,18 @@ static CURLcode readwrite_data(struct SessionHandle *data,
|
|||||||
data->set.buffer_size : BUFSIZE;
|
data->set.buffer_size : BUFSIZE;
|
||||||
size_t bytestoread = buffersize;
|
size_t bytestoread = buffersize;
|
||||||
|
|
||||||
if(k->size != -1 && !k->header) {
|
if(
|
||||||
|
#if defined(USE_NGHTTP2)
|
||||||
|
/* For HTTP/2, read data without caring about the content
|
||||||
|
length. This is safe because body in HTTP/2 is always
|
||||||
|
segmented thanks to its framing layer. Meanwhile, we have to
|
||||||
|
call Curl_read to ensure that http2_handle_stream_close is
|
||||||
|
called when we read all incoming bytes for a particular
|
||||||
|
stream. */
|
||||||
|
!((conn->handler->protocol & PROTO_FAMILY_HTTP) &&
|
||||||
|
conn->httpversion == 20) &&
|
||||||
|
#endif
|
||||||
|
k->size != -1 && !k->header) {
|
||||||
/* make sure we don't read "too much" if we can help it since we
|
/* make sure we don't read "too much" if we can help it since we
|
||||||
might be pipelining and then someone else might want to read what
|
might be pipelining and then someone else might want to read what
|
||||||
follows! */
|
follows! */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user