]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
event: fix wakeup consumption
authorStefan Eissing <stefan@eissing.org>
Mon, 11 May 2026 12:56:04 +0000 (14:56 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 12 May 2026 06:11:31 +0000 (08:11 +0200)
The events on a multi wakeup socketpair were only consumed via
curl_multi_poll()/curl_multi_wait() but not in event based processing on
a curl_multi_socket() call. That led to busy loops as reported in

Fixes #21547
Reported-by: Earnestly on github
Closes #21549

lib/multi.c

index be32740a7097e23a3eb6d31d0e73058a6f58dc1d..5e84133f13fd8e495427c761ced4662d8796aadf 100644 (file)
@@ -2703,6 +2703,11 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
   Curl_uint32_bset_remove(&multi->dirty, data->mid);
 
   if(data == multi->admin) {
+#ifdef ENABLE_WAKEUP
+    /* Consume any pending wakeup signals before processing.
+     * This is necessary for event based processing. See #21547 */
+    (void)Curl_wakeup_consume(multi->wakeup_pair, TRUE);
+#endif
 #ifdef USE_RESOLV_THREADED
     Curl_async_thrdd_multi_process(multi);
 #endif