diff options
author | Nicolás Reynolds <fauno@endefensadelsl.org> | 2014-01-15 03:49:32 +0000 |
---|---|---|
committer | Nicolás Reynolds <fauno@endefensadelsl.org> | 2014-01-15 03:49:32 +0000 |
commit | 154321f7346db5c32dbdf9c730735969eabbd88f (patch) | |
tree | c89badf5b9547f313d7b28a7f400c3df404af70f /core/curl/0001-FILE-don-t-wait-due-to-CURLOPT_MAX_RECV_SPEED_LARGE.patch | |
parent | 271da49386e259723ef574713339f04886630604 (diff) |
Wed Jan 15 03:43:12 UTC 2014
Diffstat (limited to 'core/curl/0001-FILE-don-t-wait-due-to-CURLOPT_MAX_RECV_SPEED_LARGE.patch')
-rw-r--r-- | core/curl/0001-FILE-don-t-wait-due-to-CURLOPT_MAX_RECV_SPEED_LARGE.patch | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/core/curl/0001-FILE-don-t-wait-due-to-CURLOPT_MAX_RECV_SPEED_LARGE.patch b/core/curl/0001-FILE-don-t-wait-due-to-CURLOPT_MAX_RECV_SPEED_LARGE.patch new file mode 100644 index 000000000..97858e3f5 --- /dev/null +++ b/core/curl/0001-FILE-don-t-wait-due-to-CURLOPT_MAX_RECV_SPEED_LARGE.patch @@ -0,0 +1,47 @@ +From 2715d7f948c8eb7cd3cba38f3dff6d4148e7cfaf Mon Sep 17 00:00:00 2001 +From: Daniel Stenberg <daniel@haxx.se> +Date: Sun, 22 Dec 2013 23:36:11 +0100 +Subject: [PATCH] FILE: don't wait due to CURLOPT_MAX_RECV_SPEED_LARGE + +The FILE:// code doesn't support this option - and it doesn't make sense +to support it as long as it works as it does since then it'd only block +even longer. + +But: setting CURLOPT_MAX_RECV_SPEED_LARGE would make the transfer first +get done and then libcurl would wait until the average speed would get +low enough. This happened because the transfer happens completely in the +DO state for FILE:// but then it would still unconditionally continue in +to the PERFORM state where the speed check is made. + +Starting now, the code will skip from DO_DONE to DONE immediately if no +socket is set to be recv()ed or send()ed to. + +Bug: http://curl.haxx.se/bug/view.cgi?id=1312 +Reported-by: Mohammad AlSaleh +--- + lib/multi.c | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/lib/multi.c b/lib/multi.c +index ec45ecb..191c9b8 100644 +--- a/lib/multi.c ++++ b/lib/multi.c +@@ -1381,7 +1381,14 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, + Curl_move_handle_from_send_to_recv_pipe(data, data->easy_conn); + /* Check if we can move pending requests to send pipe */ + Curl_multi_process_pending_handles(multi); +- multistate(data, CURLM_STATE_WAITPERFORM); ++ ++ /* Only perform the transfer if there's a good socket to work with. ++ Having both BAD is a signal to skip immediately to DONE */ ++ if((data->easy_conn->sockfd != CURL_SOCKET_BAD) || ++ (data->easy_conn->writesockfd != CURL_SOCKET_BAD)) ++ multistate(data, CURLM_STATE_WAITPERFORM); ++ else ++ multistate(data, CURLM_STATE_DONE); + result = CURLM_CALL_MULTI_PERFORM; + break; + +-- +1.8.5.2 + |