mirror of
https://github.com/moparisthebest/curl
synced 2024-08-13 17:03:50 -04:00
curl_easy_pause: on unpause, trigger mulit-socket handling
When the multi-socket API is used, we need the handle to be checked again when it gets unpaused. Bug: http://curl.haxx.se/mail/lib-2013-07/0239.html Reported-by: Justin Karneges
This commit is contained in:
parent
db2deba6b4
commit
b5478a0e03
@ -5,7 +5,7 @@
|
|||||||
.\" * | (__| |_| | _ <| |___
|
.\" * | (__| |_| | _ <| |___
|
||||||
.\" * \___|\___/|_| \_\_____|
|
.\" * \___|\___/|_| \_\_____|
|
||||||
.\" *
|
.\" *
|
||||||
.\" * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
.\" * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
.\" *
|
.\" *
|
||||||
.\" * This software is licensed as described in the file COPYING, which
|
.\" * This software is licensed as described in the file COPYING, which
|
||||||
.\" * you should have received as part of this distribution. The terms
|
.\" * you should have received as part of this distribution. The terms
|
||||||
@ -68,6 +68,18 @@ code means something wrong occurred after the new state was set. See the
|
|||||||
.SH AVAILABILITY
|
.SH AVAILABILITY
|
||||||
This function was added in libcurl 7.18.0. Before this version, there was no
|
This function was added in libcurl 7.18.0. Before this version, there was no
|
||||||
explicit support for pausing transfers.
|
explicit support for pausing transfers.
|
||||||
|
.SH "USAGE WITH THE MULTI-SOCKET INTERFACE"
|
||||||
|
Before libcurl 7.32.0, when a specific handle was unpaused with this function,
|
||||||
|
there was no particular forced rechecking or similar of the socket's state,
|
||||||
|
which made the continuation of the transfer get delayed until next
|
||||||
|
multi-socket call invoke or even longer. Alternatively, the user could
|
||||||
|
forcibly call for example curl_multi_socket_all(3) - with a rather hefty
|
||||||
|
performance penalty.
|
||||||
|
|
||||||
|
Starting in libcurl 7.32.0, unpausing a transfer will schedule a timeout
|
||||||
|
trigger for that handle 1 millisecond into the future, so that a
|
||||||
|
curl_multi_socket_action( ... CURL_SOCKET_TIMEOUT) can be used immediately
|
||||||
|
afterwards to get the transfer going again as desired.
|
||||||
.SH "MEMORY USE"
|
.SH "MEMORY USE"
|
||||||
When pausing a read by returning the magic return code from a write callback,
|
When pausing a read by returning the magic return code from a write callback,
|
||||||
the read data is already in libcurl's internal buffers so it'll have to keep
|
the read data is already in libcurl's internal buffers so it'll have to keep
|
||||||
|
@ -854,6 +854,13 @@ CURLcode curl_easy_pause(CURL *curl, int action)
|
|||||||
free(freewrite); /* this is unconditionally no longer used */
|
free(freewrite); /* this is unconditionally no longer used */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* if there's no error and we're not pausing both directions, we want
|
||||||
|
to have this handle checked soon */
|
||||||
|
if(!result &&
|
||||||
|
((newstate&(KEEP_RECV_PAUSE|KEEP_SEND_PAUSE)) !=
|
||||||
|
(KEEP_RECV_PAUSE|KEEP_SEND_PAUSE)) )
|
||||||
|
Curl_expire(data, 1); /* get this handle going again */
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user