summaryrefslogtreecommitdiff
path: root/src/tool_progress.c
diff options
context:
space:
mode:
authorJohn Schroeder <john@schroederspace.com>2019-11-26 09:16:19 +0100
committerDaniel Stenberg <daniel@haxx.se>2019-11-26 09:17:52 +0100
commit9a2cbf30b81a2b57149bb20e78e2e4cb5c2ff389 (patch)
tree5c31ee04911407d843f17c31db412988f3154769 /src/tool_progress.c
parent7cf18b05e04bbb0f08c74d2567b0648f6c31a952 (diff)
downloadcurl-9a2cbf30b81a2b57149bb20e78e2e4cb5c2ff389.tar.gz
curl: fix --upload-file . hangs if delay in STDIN
Attempt to unpause a busy read in the CURLOPT_XFERINFOFUNCTION. When uploading from stdin in non-blocking mode, a delay in reading the stream (EAGAIN) causes curl to pause sending data (CURL_READFUNC_PAUSE). Prior to this change, a busy read was detected and unpaused only in the CURLOPT_WRITEFUNCTION handler. This change performs the same busy read handling in a CURLOPT_XFERINFOFUNCTION handler. Fixes #2051 Closes #4599 Reported-by: bdry on github
Diffstat (limited to 'src/tool_progress.c')
-rw-r--r--src/tool_progress.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/tool_progress.c b/src/tool_progress.c
index a2667f38e..ac4f58f41 100644
--- a/src/tool_progress.c
+++ b/src/tool_progress.c
@@ -95,10 +95,18 @@ int xferinfo_cb(void *clientp,
curl_off_t ulnow)
{
struct per_transfer *per = clientp;
+ struct OutStruct *outs = &per->outs;
+ struct OperationConfig *config = outs->config;
per->dltotal = dltotal;
per->dlnow = dlnow;
per->ultotal = ultotal;
per->ulnow = ulnow;
+
+ if(config->readbusy) {
+ config->readbusy = FALSE;
+ curl_easy_pause(per->curl, CURLPAUSE_CONT);
+ }
+
return 0;
}