From: Marc Hoersken Date: Mon, 25 Jul 2022 20:29:27 +0000 (+0200) Subject: multi_wait: fix skipping to populate revents for extra_fds X-Git-Tag: curl-7_85_0~23 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a71fe41d2f80032c8ffcd28d9f16a9897db41f39;p=thirdparty%2Fcurl.git multi_wait: fix skipping to populate revents for extra_fds On Windows revents was not populated for extra_fds if multi_wait had to wait due to the Curl_poll pre-check not signalling any readiness. This commit fixes that. Reviewed-by: Marcel Raad Reviewed-by: Jay Satiro Closes #9361 --- diff --git a/lib/multi.c b/lib/multi.c index b20bd9ad3f..5cd0277aee 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -1366,8 +1366,9 @@ static CURLMcode multi_wait(struct Curl_multi *multi, unsigned r = ufds[curlfds + i].revents; unsigned short mask = 0; #ifdef USE_WINSOCK + curl_socket_t s = extra_fds[i].fd; wsa_events.lNetworkEvents = 0; - if(WSAEnumNetworkEvents(extra_fds[i].fd, NULL, &wsa_events) == 0) { + if(WSAEnumNetworkEvents(s, NULL, &wsa_events) == 0) { if(wsa_events.lNetworkEvents & (FD_READ|FD_ACCEPT|FD_CLOSE)) mask |= CURL_WAIT_POLLIN; if(wsa_events.lNetworkEvents & (FD_WRITE|FD_CONNECT|FD_CLOSE)) @@ -1377,9 +1378,11 @@ static CURLMcode multi_wait(struct Curl_multi *multi, if(ret && pollrc <= 0 && wsa_events.lNetworkEvents) retcode++; } - WSAEventSelect(extra_fds[i].fd, multi->wsa_event, 0); - if(pollrc <= 0) + WSAEventSelect(s, multi->wsa_event, 0); + if(pollrc <= 0) { + extra_fds[i].revents = mask; continue; + } #endif if(r & POLLIN) mask |= CURL_WAIT_POLLIN;