← Commit list

c7328740ec

Daniel Stenberg
Daniel Stenberg
2026-07-28
SUCCESS Duration: 413s

Subject

lib2405: adjust for non-threaded builds

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

tests/data/test2405+0 -1
@@ -4,7 +4,6 @@
<keywords>
multi
HTTP
-flaky
</keywords>
</info>
tests/data/test2407+0 -1
@@ -5,7 +5,6 @@
multi
HTTP
HTTP/2
-flaky
</keywords>
</info>
tests/libtest/lib2405.c+44 -25
@@ -41,24 +41,6 @@
/* ---------------------------------------------------------------- */
-#define test_check(expected_fds) \
- if(result != CURLE_OK) { \
- curl_mfprintf(stderr, "test failed with code: %d\n", (int)result); \
- goto test_cleanup; \
- } \
- else if(fd_count != (expected_fds)) { \
- curl_mfprintf(stderr, "Max number of waitfds: %u not as expected: %u\n", \
- fd_count, expected_fds); \
- result = TEST_ERR_FAILURE; \
- goto test_cleanup; \
- }
-
-#define test_run_check(option, expected_fds) \
- do { \
- result = test_run(URL, option, &fd_count); \
- test_check(expected_fds); \
- } while(0)
-
/* ---------------------------------------------------------------- */
enum {
@@ -302,6 +284,22 @@ test_cleanup:
return result;
}
+static CURLcode test_run_check(const char *URL, long option,
+ unsigned int expected_fds)
+{
+ unsigned int fd_count = 0;
+ CURLcode result = test_run(URL, option, &fd_count);
+ if(result)
+ curl_mfprintf(stderr, "test failed with code: %d\n", (int)result);
+ else if(fd_count != expected_fds) {
+ curl_mfprintf(stderr,
+ "Max number of waitfds: %u not as expected: %u\n",
+ fd_count, expected_fds);
+ result = TEST_ERR_FAILURE;
+ }
+ return result;
+}
+
static CURLcode empty_multi_test(void)
{
CURLMcode mresult = CURLM_OK;
@@ -360,29 +358,50 @@ test_cleanup:
return result;
}
+static unsigned int uses_threaded(void)
+{
+ curl_version_info_data *ver = curl_version_info(CURLVERSION_NOW);
+ const char * const *n = ver->feature_names;
+ int i;
+ unsigned int uses = 0;
+ /* the 'asyn-rr' feature tells us libcurl uses the threaded resolver */
+ for(i = 0; n[i]; i++) {
+ if(!strcmp("asyn-rr", n[i]))
+ uses = 1;
+ }
+ /* if not using asyn-rr, check if doing asynch DNS without using c-ares */
+ if(!uses && (ver->features & CURL_VERSION_ASYNCHDNS) && !ver->ares)
+ uses = 1;
+ return uses;
+}
+
static CURLcode test_lib2405(const char *URL)
{
CURLcode result = CURLE_OK;
- unsigned int fd_count = 0;
+ int uses_threaded_resolver;
global_init(CURL_GLOBAL_ALL);
+ uses_threaded_resolver = uses_threaded();
+
/* Testing curl_multi_waitfds on empty and not started handles */
result = empty_multi_test();
if(result != CURLE_OK)
goto test_cleanup;
if(testnum == 2405) {
- /* HTTP1, expected 3 waitfds - one for each transfer + wakeup */
- test_run_check(TEST_USE_HTTP1, 3U);
+ /* HTTP1, one for each transfer + possible wakeup */
+ result = test_run_check(URL, TEST_USE_HTTP1, 2 + uses_threaded_resolver);
}
#ifdef USE_HTTP2
else { /* 2407 */
- /* HTTP2, expected 3 waitfds - one for each transfer + wakeup */
- test_run_check(TEST_USE_HTTP2, 3U);
+ /* HTTP2, one for each transfer + possible wakeup */
+ result = test_run_check(URL, TEST_USE_HTTP2, 2 + uses_threaded_resolver);
- /* HTTP2 with multiplexing, expected 2 waitfds - transfers + wakeup */
- test_run_check(TEST_USE_HTTP2_MPLEX, 2U);
+ /* HTTP2 with multiplexing, expected one waitfds + possible wakeup */
+ if(!result)
+ result = test_run_check(URL, TEST_USE_HTTP2_MPLEX,
+ 1 + uses_threaded_resolver);
}
#endif