Skip to content

Commit

Permalink
http2: Fix erroneous debug message that h2 connection closed
Browse files Browse the repository at this point in the history
Prior to this change in libcurl debug builds http2 stream closure was
erroneously referred to as connection closure.

Before:
* nread <= 0, server closed connection, bailing

After:
* nread == 0, stream closed, bailing

Closes #5118
  • Loading branch information
jay committed Mar 18, 2020
1 parent 0ae463f commit 347a374
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 8 deletions.
2 changes: 0 additions & 2 deletions lib/http2.c
Original file line number Diff line number Diff line change
Expand Up @@ -1727,8 +1727,6 @@ static ssize_t http2_recv(struct connectdata *conn, int sockindex,

return retlen;
}
/* If this stream is closed, return 0 to signal the http routine to close
the connection */
if(stream->closed)
return 0;
*err = CURLE_AGAIN;
Expand Down
20 changes: 14 additions & 6 deletions lib/transfer.c
Original file line number Diff line number Diff line change
Expand Up @@ -568,17 +568,20 @@ static CURLcode readwrite_data(struct Curl_easy *data,
bool is_empty_data = FALSE;
size_t buffersize = data->set.buffer_size;
size_t bytestoread = buffersize;
#ifdef USE_NGHTTP2
bool is_http2 = ((conn->handler->protocol & PROTO_FAMILY_HTTP) &&
(conn->httpversion == 20));
#endif

if(
#if defined(USE_NGHTTP2)
#ifdef 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) &&
!is_http2 &&
#endif
k->size != -1 && !k->header) {
/* make sure we don't read too much */
Expand Down Expand Up @@ -621,9 +624,14 @@ static CURLcode readwrite_data(struct Curl_easy *data,
k->buf[nread] = 0;
}
else {
/* if we receive 0 or less here, the server closed the connection
and we bail out from this! */
DEBUGF(infof(data, "nread <= 0, server closed connection, bailing\n"));
/* if we receive 0 or less here, either the http2 stream is closed or the
server closed the connection and we bail out from this! */
#ifdef USE_NGHTTP2
if(is_http2 && !nread)
DEBUGF(infof(data, "nread == 0, stream closed, bailing\n"));
else
#endif
DEBUGF(infof(data, "nread <= 0, server closed connection, bailing\n"));
k->keepon &= ~KEEP_RECV;
break;
}
Expand Down

0 comments on commit 347a374

Please sign in to comment.