From 9a2cbf30b81a2b57149bb20e78e2e4cb5c2ff389 Mon Sep 17 00:00:00 2001 From: John Schroeder Date: Tue, 26 Nov 2019 09:16:19 +0100 Subject: 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 --- src/tool_progress.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/tool_progress.c') 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; } -- cgit v1.2.3