diff options
-rw-r--r-- | lib/multi.c | 8 | ||||
-rw-r--r-- | lib/urldata.h | 1 |
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 */ }; |