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:
Stefan Eissing 2024-06-07 14:38:51 +02:00 committed by Daniel Stenberg
parent 1424d507aa
commit 3841569ec8
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
10 changed files with 86 additions and 2 deletions

View file

@ -1206,6 +1206,7 @@ static const struct Curl_crtype cr_hyper_protocol = {
Curl_creader_def_resume_from,
Curl_creader_def_rewind,
cr_hyper_unpause,
Curl_creader_def_is_paused,
Curl_creader_def_done,
sizeof(struct Curl_creader)
};