aboutsummaryrefslogtreecommitdiff
path: root/lib/libpthread
diff options
context:
space:
mode:
authorArchie Cobbs <archie@FreeBSD.org>2002-08-29 21:39:19 +0000
committerArchie Cobbs <archie@FreeBSD.org>2002-08-29 21:39:19 +0000
commitafa46253071aa490469e908405b71887c252f9c4 (patch)
treeaa7dcc9cb64d129e3a4c13a9f90f8e4f0054aaa0 /lib/libpthread
parent5bdfbf5afde33fe413fef0154e3a81cf39cf0828 (diff)
downloadsrc-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.c10
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,