mirror of
https://github.com/curl/curl.git
synced 2026-08-01 03:58:08 +03:00
transfer: do not use EXPIRE_NOW while blocked
- When a transfer sets `data->state.select_bits`, it is scheduled for rerun with EXPIRE_NOW. If such a transfer is blocked (due to PAUSE, for example), this will lead to a busy loop. - multi.c: check for transfer block - sendf.*: add Curl_xfer_is_blocked() - sendf.*: add client reader `is_paused()` callback - implement is_paused()` callback where needed Closes #13908
This commit is contained in:
parent
1424d507aa
commit
3841569ec8
10 changed files with 86 additions and 2 deletions
|
|
@ -2495,7 +2495,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
|
|||
}
|
||||
}
|
||||
}
|
||||
else if(data->state.select_bits) {
|
||||
else if(data->state.select_bits && !Curl_xfer_is_blocked(data)) {
|
||||
/* This avoids CURLM_CALL_MULTI_PERFORM so that a very fast transfer
|
||||
won't get stuck on this transfer at the expense of other concurrent
|
||||
transfers */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue