summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2018-05-12 21:58:46 +0200
committerDaniel Stenberg <daniel@haxx.se>2018-05-14 08:22:46 +0200
commit7d6e01441a161c81b19626bdf2b85dafece5f1b8 (patch)
tree8d481faa7497253d157d0bfe4ae2c36ddbc0f0f1
parent583b42cb3b809b1bf597af160468ccba728c2248 (diff)
downloadcurl-7d6e01441a161c81b19626bdf2b85dafece5f1b8.tar.gz
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
-rw-r--r--lib/http2.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/http2.c b/lib/http2.c
index 770ebdab5..62b109293 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;