curl-library
[PATCH] multi: return CURLM_CALL_MULTI_PERFORM in PERFORM phase
From: Kamil Dudka <kdudka_at_redhat.com>
Date: Mon, 7 Oct 2013 17:13:50 +0200
Date: Mon, 7 Oct 2013 17:13:50 +0200
... if there is nothing to wait for. This fixes a regression introduced
by commit 0feeab78 limiting the speed of SCP upload to 16384 B/s on a
fast connection (such as localhost).
---
RELEASE-NOTES | 1 +
lib/multi.c | 5 ++++-
lib/transfer.c | 4 +++-
lib/transfer.h | 3 ++-
4 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index ab59159..8dc2eb3 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -59,6 +59,7 @@ This release includes the following bugfixes:
o win32: fix Visual Studio 2010 build with WINVER >= 0x600 [22]
o configure: use icc options without space [21]
o test1112: Increase the timeout from 7s to 16s [20]
+ o SCP: upload speed on a fast connection limited to 16384 B/s
This release includes the following known bugs:
diff --git a/lib/multi.c b/lib/multi.c
index e723a3e..9b5579d 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -1412,6 +1412,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
{
char *newurl = NULL;
bool retry = FALSE;
+ bool any_progress = FALSE;
/* check if over send speed */
if((data->set.max_send_speed > 0) &&
@@ -1446,7 +1447,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
}
/* read/write data if it is ready to do so */
- data->result = Curl_readwrite(data->easy_conn, &done);
+ data->result = Curl_readwrite(data->easy_conn, &done, &any_progress);
k = &data->req;
@@ -1553,6 +1554,8 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
result = CURLM_CALL_MULTI_PERFORM;
}
}
+ else if(any_progress)
+ result = CURLM_CALL_MULTI_PERFORM;
if(newurl)
free(newurl);
diff --git a/lib/transfer.c b/lib/transfer.c
index 533e394..bffd6d3 100644
--- a/lib/transfer.c
+++ b/lib/transfer.c
@@ -985,7 +985,8 @@ static CURLcode readwrite_upload(struct SessionHandle *data,
* be read and written to/from the connection.
*/
CURLcode Curl_readwrite(struct connectdata *conn,
- bool *done)
+ bool *done,
+ bool *any_progress)
{
struct SessionHandle *data = conn->data;
struct SingleRequest *k = &data->req;
@@ -1042,6 +1043,7 @@ CURLcode Curl_readwrite(struct connectdata *conn,
k->now = Curl_tvnow();
if(didwhat) {
+ *any_progress = true;
/* Update read/write counters */
if(k->bytecountp)
*k->bytecountp = k->bytecount; /* read count */
diff --git a/lib/transfer.h b/lib/transfer.h
index ad4a3ac..f32a957 100644
--- a/lib/transfer.h
+++ b/lib/transfer.h
@@ -40,7 +40,8 @@ CURLcode Curl_follow(struct SessionHandle *data, char *newurl,
followtype type);
-CURLcode Curl_readwrite(struct connectdata *conn, bool *done);
+CURLcode Curl_readwrite(struct connectdata *conn, bool *done,
+ bool *any_progress);
int Curl_single_getsock(const struct connectdata *conn,
curl_socket_t *socks,
int numsocks);
--
1.7.1
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette: http://curl.haxx.se/mail/etiquette.html
Received on 2013-10-07