Fix bug that HTTP/2 hangs if whole response body is read with headers

For HTTP/2, we may read up everything including responde body with
header fields in Curl_http_readwrite_headers. If no content-length is
provided, curl waits for the connection close, which we emulate it
using conn->proto.httpc.closed = TRUE. The thing is if we read
everything, then http2_recv won't be called and we cannot signal the
HTTP/2 stream has closed. As a workaround, we return nonzero from
data_pending to call http2_recv.
This commit is contained in:
Tatsuhiro Tsujikawa
2014-02-27 01:21:17 +09:00
committed by Daniel Stenberg
parent 53f1f4a18e
commit cde0cf7c5e
2 changed files with 14 additions and 1 deletions

View File

@@ -514,6 +514,10 @@ static ssize_t http2_recv(struct connectdata *conn, int sockindex,
(void)sockindex; /* we always do HTTP2 on sockindex 0 */
if(httpc->closed) {
return 0;
}
/* Nullify here because we call nghttp2_session_send() and they
might refer to the old buffer. */
httpc->upload_mem = NULL;