summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/multi.c8
-rw-r--r--lib/urldata.h1
2 files changed, 9 insertions, 0 deletions
diff --git a/lib/multi.c b/lib/multi.c
index 48dadd83b..2d83e734e 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -1365,6 +1365,11 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
result = CURLE_OK;
break;
}
+ else if(data->state.previouslypending) {
+ /* this transfer comes from the pending queue so try move another */
+ infof(data, "Transfer was pending, now try another\n");
+ process_pending_handles(data->multi);
+ }
if(!result) {
if(async)
@@ -2991,6 +2996,9 @@ static void process_pending_handles(struct Curl_multi *multi)
/* Make sure that the handle will be processed soonish. */
Curl_expire(data, 0, EXPIRE_RUN_NOW);
+
+ /* mark this as having been in the pending queue */
+ data->state.previouslypending = TRUE;
}
}
diff --git a/lib/urldata.h b/lib/urldata.h
index 4b09f24fd..344cc472e 100644
--- a/lib/urldata.h
+++ b/lib/urldata.h
@@ -1363,6 +1363,7 @@ struct UrlState {
when multi_done() is called, to prevent multi_done() to get
invoked twice when the multi interface is used. */
bit stream_depends_e:1; /* set or don't set the Exclusive bit */
+ bit previouslypending:1; /* this transfer WAS in the multi->pending queue */
};