diff options
author | Archie Cobbs <archie@FreeBSD.org> | 2002-08-29 21:39:19 +0000 |
---|---|---|
committer | Archie Cobbs <archie@FreeBSD.org> | 2002-08-29 21:39:19 +0000 |
commit | afa46253071aa490469e908405b71887c252f9c4 (patch) | |
tree | aa7dcc9cb64d129e3a4c13a9f90f8e4f0054aaa0 /lib/libpthread | |
parent | 5bdfbf5afde33fe413fef0154e3a81cf39cf0828 (diff) | |
download | src-afa46253071aa490469e908405b71887c252f9c4.tar.gz src-afa46253071aa490469e908405b71887c252f9c4.zip |
Make the libc_r version of select() set the readable or writable
file descriptor bit if poll() returns POLLERR, POLLHUP, or POLLNVAL.
Othewise, it's possible for select() to return successfully but
with no bits set.
Reviewed by: deischen
MFC after: 3 days
PR: bin/42175
Notes
Notes:
svn path=/head/; revision=102586
Diffstat (limited to 'lib/libpthread')
-rw-r--r-- | lib/libpthread/thread/thr_select.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/libpthread/thread/thr_select.c b/lib/libpthread/thread/thr_select.c index a3a9a9d2d138..2776cb2c80fc 100644 --- a/lib/libpthread/thread/thr_select.c +++ b/lib/libpthread/thread/thr_select.c @@ -179,8 +179,9 @@ _select(int numfds, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, got_events = 0; if (readfds != NULL) { if (FD_ISSET(data.fds[i].fd, readfds)) { - if (data.fds[i].revents & (POLLIN | - POLLRDNORM)) + if ((data.fds[i].revents & (POLLIN + | POLLRDNORM | POLLERR + | POLLHUP | POLLNVAL)) != 0) got_events++; else FD_CLR(data.fds[i].fd, readfds); @@ -188,8 +189,9 @@ _select(int numfds, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, } if (writefds != NULL) { if (FD_ISSET(data.fds[i].fd, writefds)) { - if (data.fds[i].revents & (POLLOUT | - POLLWRNORM | POLLWRBAND)) + if ((data.fds[i].revents & (POLLOUT + | POLLWRNORM | POLLWRBAND | POLLERR + | POLLHUP | POLLNVAL)) != 0) got_events++; else FD_CLR(data.fds[i].fd, |