Skip to content

Commit

Permalink
select: align poll emulation to return all relevant events
Browse files Browse the repository at this point in the history
The poll emulation via select already consumes POLLRDNORM,
POLLWRNORM and POLLRDBAND as input events. Therefore it
should also return them as output events if signaled.

Also fix indentation in input event handling block.

Assisted-by: Jay Satiro
Reviewed-by: Daniel Stenberg

Replaces #5852
Closes #5883
  • Loading branch information
mback2k committed Sep 2, 2020
1 parent ce56cc8 commit 20d74b7
Showing 1 changed file with 20 additions and 8 deletions.
28 changes: 20 additions & 8 deletions lib/select.c
Expand Up @@ -378,7 +378,7 @@ int Curl_poll(struct pollfd ufds[], unsigned int nfds, timediff_t timeout_ms)
if(ufds[i].revents & POLLHUP)
ufds[i].revents |= POLLIN;
if(ufds[i].revents & POLLERR)
ufds[i].revents |= (POLLIN|POLLOUT);
ufds[i].revents |= POLLIN|POLLOUT;
}

#else /* HAVE_POLL_FINE */
Expand All @@ -394,7 +394,7 @@ int Curl_poll(struct pollfd ufds[], unsigned int nfds, timediff_t timeout_ms)
continue;
VERIFY_SOCK(ufds[i].fd);
if(ufds[i].events & (POLLIN|POLLOUT|POLLPRI|
POLLRDNORM|POLLWRNORM|POLLRDBAND)) {
POLLRDNORM|POLLWRNORM|POLLRDBAND)) {
if(ufds[i].fd > maxfd)
maxfd = ufds[i].fd;
if(ufds[i].events & (POLLRDNORM|POLLIN))
Expand All @@ -421,12 +421,24 @@ int Curl_poll(struct pollfd ufds[], unsigned int nfds, timediff_t timeout_ms)
ufds[i].revents = 0;
if(ufds[i].fd == CURL_SOCKET_BAD)
continue;
if(FD_ISSET(ufds[i].fd, &fds_read))
ufds[i].revents |= POLLIN;
if(FD_ISSET(ufds[i].fd, &fds_write))
ufds[i].revents |= POLLOUT;
if(FD_ISSET(ufds[i].fd, &fds_err))
ufds[i].revents |= POLLPRI;
if(FD_ISSET(ufds[i].fd, &fds_read)) {
if(ufds[i].events & POLLRDNORM)
ufds[i].revents |= POLLRDNORM;
if(ufds[i].events & POLLIN)
ufds[i].revents |= POLLIN;
}
if(FD_ISSET(ufds[i].fd, &fds_write)) {
if(ufds[i].events & POLLWRNORM)
ufds[i].revents |= POLLWRNORM;
if(ufds[i].events & POLLOUT)
ufds[i].revents |= POLLOUT;
}
if(FD_ISSET(ufds[i].fd, &fds_err)) {
if(ufds[i].events & POLLRDBAND)
ufds[i].revents |= POLLRDBAND;
if(ufds[i].events & POLLPRI)
ufds[i].revents |= POLLPRI;
}
if(ufds[i].revents != 0)
r++;
}
Expand Down

0 comments on commit 20d74b7

Please sign in to comment.