summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Hoersken <info@marc-hoersken.de>2020-09-12 22:02:25 +0200
committerMarc Hoersken <info@marc-hoersken.de>2020-09-17 07:41:14 +0200
commit1060955a617dceddeccf6ba1505fe92df317d40b (patch)
tree1b0123d0dddf7783d29f26d65128446e6ed4d6d4
parent40d67da7caaef4c23399306cbcac7883a925ce6f (diff)
downloadcurl-1060955a617dceddeccf6ba1505fe92df317d40b.tar.gz
multi: align WinSock mask variables in Curl_multi_wait
Also skip pre-checking sockets to set timeout_ms to 0 after the first socket has been detected to be ready. Reviewed-by: rcombs on github Reviewed-by: Daniel Stenberg Follow up to #5886
-rw-r--r--lib/multi.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/lib/multi.c b/lib/multi.c
index f374b2721..4cc7c5ae6 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -1183,9 +1183,9 @@ static CURLMcode Curl_multi_wait(struct Curl_multi *multi,
#endif
if(bitmap & GETSOCK_READSOCK(i)) {
#ifdef USE_WINSOCK
- if(SOCKET_READABLE(sockbunch[i], 0) > 0)
+ if(timeout_ms && SOCKET_READABLE(sockbunch[i], 0) > 0)
timeout_ms = 0;
- mask |= (FD_READ|FD_ACCEPT|FD_CLOSE);
+ mask |= FD_READ|FD_ACCEPT|FD_CLOSE;
#else
ufds[nfds].fd = sockbunch[i];
ufds[nfds].events = POLLIN;
@@ -1195,9 +1195,9 @@ static CURLMcode Curl_multi_wait(struct Curl_multi *multi,
}
if(bitmap & GETSOCK_WRITESOCK(i)) {
#ifdef USE_WINSOCK
- if(SOCKET_WRITABLE(sockbunch[i], 0) > 0)
+ if(timeout_ms && SOCKET_WRITABLE(sockbunch[i], 0) > 0)
timeout_ms = 0;
- mask |= (FD_WRITE|FD_CONNECT|FD_CLOSE);
+ mask |= FD_WRITE|FD_CONNECT|FD_CLOSE;
#else
ufds[nfds].fd = sockbunch[i];
ufds[nfds].events = POLLOUT;
@@ -1221,34 +1221,34 @@ static CURLMcode Curl_multi_wait(struct Curl_multi *multi,
/* Add external file descriptions from poll-like struct curl_waitfd */
for(i = 0; i < extra_nfds; i++) {
#ifdef USE_WINSOCK
- long events = 0;
+ long mask = 0;
extra_fds[i].revents = 0;
pre_poll.fd = extra_fds[i].fd;
pre_poll.events = 0;
pre_poll.revents = 0;
if(extra_fds[i].events & CURL_WAIT_POLLIN) {
- events |= (FD_READ|FD_ACCEPT|FD_CLOSE);
+ mask |= FD_READ|FD_ACCEPT|FD_CLOSE;
pre_poll.events |= POLLIN;
}
if(extra_fds[i].events & CURL_WAIT_POLLPRI) {
- events |= FD_OOB;
+ mask |= FD_OOB;
pre_poll.events |= POLLPRI;
}
if(extra_fds[i].events & CURL_WAIT_POLLOUT) {
- events |= (FD_WRITE|FD_CONNECT|FD_CLOSE);
+ mask |= FD_WRITE|FD_CONNECT|FD_CLOSE;
pre_poll.events |= POLLOUT;
}
if(Curl_poll(&pre_poll, 1, 0) > 0) {
if(pre_poll.revents & POLLIN)
extra_fds[i].revents |= CURL_WAIT_POLLIN;
- if(pre_poll.revents & POLLOUT)
- extra_fds[i].revents |= CURL_WAIT_POLLOUT;
if(pre_poll.revents & POLLPRI)
extra_fds[i].revents |= CURL_WAIT_POLLPRI;
+ if(pre_poll.revents & POLLOUT)
+ extra_fds[i].revents |= CURL_WAIT_POLLOUT;
if(extra_fds[i].revents)
timeout_ms = 0;
}
- if(WSAEventSelect(extra_fds[i].fd, multi->wsa_event, events) != 0)
+ if(WSAEventSelect(extra_fds[i].fd, multi->wsa_event, mask) != 0)
return CURLM_INTERNAL_ERROR;
#else
ufds[nfds].fd = extra_fds[i].fd;