From: Gabriel Marin Date: Mon, 18 Aug 2025 16:18:31 +0000 (+0300) Subject: easy: add 'poll_fds' function to reduce size of 'wait_or_timeout' X-Git-Tag: curl-8_16_0~147 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9a37dd3494377ef3b5169deafa186cb647f06bfc;p=thirdparty%2Fcurl.git easy: add 'poll_fds' function to reduce size of 'wait_or_timeout' Closes #18313 --- diff --git a/lib/easy.c b/lib/easy.c index b526e6cff0..b9b8d52754 100644 --- a/lib/easy.c +++ b/lib/easy.c @@ -567,6 +567,39 @@ static unsigned int populate_fds(struct pollfd *fds, struct events *ev) return numfds; } +/* poll_fds() + * + * poll the fds[] array + */ +static CURLcode poll_fds(struct events *ev, + struct pollfd *fds, + const unsigned int numfds, + int *pollrc) +{ + if(numfds) { + /* wait for activity or timeout */ +#if DEBUG_EV_POLL + fprintf(stderr, "poll(numfds=%u, timeout=%ldms)\n", numfds, ev->ms); +#endif + *pollrc = Curl_poll(fds, numfds, ev->ms); +#if DEBUG_EV_POLL + fprintf(stderr, "poll(numfds=%u, timeout=%ldms) -> %d\n", + numfds, ev->ms, *pollrc); +#endif + if(*pollrc < 0) + return CURLE_UNRECOVERABLE_POLL; + } + else { +#if DEBUG_EV_POLL + fprintf(stderr, "poll, but no fds, wait timeout=%ldms\n", ev->ms); +#endif + *pollrc = 0; + if(ev->ms > 0) + curlx_wait_ms(ev->ms); + } + return CURLE_OK; +} + /* wait_or_timeout() * * waits for activity on any of the given sockets, or the timeout to trigger. @@ -587,27 +620,9 @@ static CURLcode wait_or_timeout(struct Curl_multi *multi, struct events *ev) /* get the time stamp to use to figure out how long poll takes */ before = curlx_now(); - if(numfds) { - /* wait for activity or timeout */ -#if DEBUG_EV_POLL - fprintf(stderr, "poll(numfds=%u, timeout=%ldms)\n", numfds, ev->ms); -#endif - pollrc = Curl_poll(fds, numfds, ev->ms); -#if DEBUG_EV_POLL - fprintf(stderr, "poll(numfds=%u, timeout=%ldms) -> %d\n", - numfds, ev->ms, pollrc); -#endif - if(pollrc < 0) - return CURLE_UNRECOVERABLE_POLL; - } - else { -#if DEBUG_EV_POLL - fprintf(stderr, "poll, but no fds, wait timeout=%ldms\n", ev->ms); -#endif - pollrc = 0; - if(ev->ms > 0) - curlx_wait_ms(ev->ms); - } + result = poll_fds(ev, fds, numfds, &pollrc); + if(result) + return result; ev->msbump = FALSE; /* reset here */