diff options
author | Antarpreet Singh <antarpreet.singh@gmail.com> | 2020-05-08 00:50:26 +0530 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2020-09-14 12:29:44 +0200 |
commit | da5ae38db0642dc6f676217a7d77119cda4cce5a (patch) | |
tree | 13bf88d8483271fc01349008d06dd96140f8017c /lib | |
parent | 51e8f2938bb0dd0a58d35bd48e5191a5c78275f7 (diff) | |
download | curl-da5ae38db0642dc6f676217a7d77119cda4cce5a.tar.gz |
imap: set cselect_bits to CURL_CSELECT_IN initially
... when continuing a transfer from a FETCH response.
When the size of the file was small enough that the entirety of the
transfer happens in a single go and schannel buffers holds the entire
data. However, it wasn't completely read in Curl_pp_readresp since a
line break was found before that could happen. So, by the time we are in
imap_state_fetch_resp - there's data in buffers that needs to be read
via Curl_read but nothing to read from the socket. After we setup a
transfer (Curl_setup_transfer), curl just waits on the socket state to
change - which doesn't happen since no new data ever comes.
Closes #5961
Diffstat (limited to 'lib')
-rw-r--r-- | lib/imap.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/imap.c b/lib/imap.c index cad0e5908..39aa0af33 100644 --- a/lib/imap.c +++ b/lib/imap.c @@ -1176,6 +1176,9 @@ static CURLcode imap_state_fetch_resp(struct connectdata *conn, int imapcode, else { /* IMAP download */ data->req.maxdownload = size; + /* force a recv/send check of this connection, as the data might've been + read off the socket already */ + data->conn->cselect_bits = CURL_CSELECT_IN; Curl_setup_transfer(data, FIRSTSOCKET, size, FALSE, -1); } } |