From: Daniel Stenberg Date: Sat, 12 May 2018 19:58:46 +0000 (+0200) Subject: http2: getsock fix for uploads X-Git-Tag: curl-7_60_0~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7d6e01441a161c81b19626bdf2b85dafece5f1b8;p=thirdparty%2Fcurl.git http2: getsock fix for uploads When there's an upload in progress, make sure to wait for the socket to become writable. Detected-by: steini2000 on github Bug: #2520 Closes #2567 --- diff --git a/lib/http2.c b/lib/http2.c index 770ebdab5e..62b1092934 100644 --- a/lib/http2.c +++ b/lib/http2.c @@ -108,6 +108,7 @@ static int http2_perform_getsock(const struct connectdata *conn, int numsocks) { const struct http_conn *c = &conn->proto.httpc; + struct SingleRequest *k = &conn->data->req; int bitmap = GETSOCK_BLANK; (void)numsocks; @@ -119,7 +120,9 @@ static int http2_perform_getsock(const struct connectdata *conn, always be ready for one */ bitmap |= GETSOCK_READSOCK(FIRSTSOCKET); - if(nghttp2_session_want_write(c->h2)) + /* we're still uploading or the HTTP/2 layer wants to send data */ + if(((k->keepon & (KEEP_SEND|KEEP_SEND_PAUSE)) == KEEP_SEND) || + nghttp2_session_want_write(c->h2)) bitmap |= GETSOCK_WRITESOCK(FIRSTSOCKET); return bitmap;