Hi, On Wed, Dec 4, 2019 at 3:37 PM Jeff Mears via curl-library < [email protected]> wrote:
> I have a background thread that starts and stops libcurl downloads using > the "multi" interface. It has a poll() loop that waits for something to > happen on either one of libcurl's sockets or on a loopback socket that is > used to interrupt poll(). > > After running for a bit, there is a periodic HTTP request we send. When > these start, libcurl calls our CURLMOPT_TIMERFUNCTION with a timeout of 0. > So the poll() loop starts polling with hot CPU. > Reading the man page <https://curl.haxx.se/libcurl/c/CURLMOPT_TIMERFUNCTION.html>, it looks like calls to the timer function request a single shot timer. Your description makes it sound like you set up a periodic timer that fires every timeout_ms milliseconds. It shouldn't be necessary for curl to provide a -1 cancellation because the timer was meant to be a single shot, it's only specified to fire once. The example on the man page may be a source of confusion. The example uses g_timeout_add() to set up a periodic timer that is cancelled when the timer callback returns false. However the example timer callback always returns false, making this a single shot timer. If you didn't notice the timer callback return value (at the end of timeout_cb in the example) you might assume that the timer is meant to be periodic. The download then completes. We curl_multi_remove_handle() then > curl_easy_cleanup() in our handling of the curl_multi_info_read() messages. > > However, at this point, even though libcurl has no active downloads on the > multi handle, we never get a timer callback to set the timeout back to -1, > so our poll() loop continues running hot. > > Am I doing something wrong? For now, I'm going to set the timeout to -1 > when curl_multi_socket_action(CURL_SOCKET_TIMEOUT) returns 0 running > handles to stop the thread running hot. > Thanks, Sean
------------------------------------------------------------------- Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library Etiquette: https://curl.haxx.se/mail/etiquette.html
