summaryrefslogtreecommitdiff
path: root/net-misc/curl/files
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2024-06-01 00:07:06 +0100
committerV3n3RiX <venerix@koprulu.sector>2024-06-01 00:07:06 +0100
commit1551fe56fd6ba43a94509cffc61b6bf854b7ac9f (patch)
treebe99b6ceb874878a108d68c641b476a2df076517 /net-misc/curl/files
parent0e2a727aba684f1a44cc0402a3f77d242140681b (diff)
gentoo auto-resync : 01:06:2024 - 00:07:06
Diffstat (limited to 'net-misc/curl/files')
-rw-r--r--net-misc/curl/files/curl-8.8.0-multi_wait-timeout.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/net-misc/curl/files/curl-8.8.0-multi_wait-timeout.patch b/net-misc/curl/files/curl-8.8.0-multi_wait-timeout.patch
new file mode 100644
index 000000000000..38d8c1bd3f20
--- /dev/null
+++ b/net-misc/curl/files/curl-8.8.0-multi_wait-timeout.patch
@@ -0,0 +1,75 @@
+https://github.com/curl/curl/pull/13825
+From: Stefan Eissing <stefan@eissing.org>
+Date: Wed, 29 May 2024 17:13:34 +0200
+Subject: [PATCH] fix multi_wait() timeout handling
+
+- determine the actual poll timeout *after* all sockets
+ have been collected. Protocols and connection filters may
+ install new timeouts during collection.
+- add debug logging to test1533 where the mistake was noticed
+- refs #13782
+--- a/lib/multi.c
++++ b/lib/multi.c
+@@ -1366,13 +1366,6 @@ static CURLMcode multi_wait(struct Curl_multi *multi,
+ if(timeout_ms < 0)
+ return CURLM_BAD_FUNCTION_ARGUMENT;
+
+- /* If the internally desired timeout is actually shorter than requested from
+- the outside, then use the shorter time! But only if the internal timer
+- is actually larger than -1! */
+- (void)multi_timeout(multi, &timeout_internal);
+- if((timeout_internal >= 0) && (timeout_internal < (long)timeout_ms))
+- timeout_ms = (int)timeout_internal;
+-
+ memset(ufds, 0, ufds_len * sizeof(struct pollfd));
+ memset(&ps, 0, sizeof(ps));
+
+@@ -1476,6 +1469,14 @@ static CURLMcode multi_wait(struct Curl_multi *multi,
+ #endif
+ #endif
+
++ /* We check the internal timeout *AFTER* we collected all sockets to
++ * poll. Collecting the sockets may install new timers by protocols
++ * and connection filters.
++ * Use the shorter one of the internal and the caller requested timeout. */
++ (void)multi_timeout(multi, &timeout_internal);
++ if((timeout_internal >= 0) && (timeout_internal < (long)timeout_ms))
++ timeout_ms = (int)timeout_internal;
++
+ #if defined(ENABLE_WAKEUP) && defined(USE_WINSOCK)
+ if(nfds || use_wakeup) {
+ #else
+--- a/tests/libtest/Makefile.inc
++++ b/tests/libtest/Makefile.inc
+@@ -487,7 +487,7 @@ lib1551_SOURCES = lib1551.c $(SUPPORTFILES)
+ lib1552_SOURCES = lib1552.c $(SUPPORTFILES) $(TESTUTIL)
+ lib1552_LDADD = $(TESTUTIL_LIBS)
+
+-lib1553_SOURCES = lib1553.c $(SUPPORTFILES) $(TESTUTIL)
++lib1553_SOURCES = lib1553.c $(SUPPORTFILES) $(TSTTRACE) $(TESTUTIL)
+ lib1553_LDADD = $(TESTUTIL_LIBS)
+
+ lib1554_SOURCES = lib1554.c $(SUPPORTFILES)
+--- a/tests/libtest/lib1553.c
++++ b/tests/libtest/lib1553.c
+@@ -24,6 +24,7 @@
+ #include "test.h"
+
+ #include "testutil.h"
++#include "testtrace.h"
+ #include "warnless.h"
+ #include "memdebug.h"
+
+@@ -74,6 +75,12 @@ CURLcode test(char *URL)
+ easy_setopt(curls, CURLOPT_XFERINFOFUNCTION, xferinfo);
+ easy_setopt(curls, CURLOPT_NOPROGRESS, 1L);
+
++ libtest_debug_config.nohex = 1;
++ libtest_debug_config.tracetime = 1;
++ test_setopt(curls, CURLOPT_DEBUGDATA, &libtest_debug_config);
++ easy_setopt(curls, CURLOPT_DEBUGFUNCTION, libtest_debug_cb);
++ easy_setopt(curls, CURLOPT_VERBOSE, 1L);
++
+ multi_add_handle(multi, curls);
+
+ multi_perform(multi, &still_running);