summaryrefslogtreecommitdiffstats
path: root/sys/kern/sys_generic.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2009-08-23 12:44:15 +0000
committerkib <kib@FreeBSD.org>2009-08-23 12:44:15 +0000
commit8b1803af930eeefcd9b18b562e0ea5a2ac730837 (patch)
tree1af9e01d3fbffe5051806f83dd7d429992c00cd0 /sys/kern/sys_generic.c
parent070a590e2dab584cfe1b087e3a4ff26742654ea9 (diff)
downloadFreeBSD-src-8b1803af930eeefcd9b18b562e0ea5a2ac730837.zip
FreeBSD-src-8b1803af930eeefcd9b18b562e0ea5a2ac730837.tar.gz
Fix the conformance of poll(2) for sockets after r195423 by
returning POLLHUP instead of POLLIN for several cases. Now, the tools/regression/poll results for FreeBSD are closer to that of the Solaris and Linux. Also, improve the POSIX conformance by explicitely clearing POLLOUT when POLLHUP is reported in pollscan(), making the fix global. Submitted by: bde Reviewed by: rwatson MFC after: 1 week
Diffstat (limited to 'sys/kern/sys_generic.c')
-rw-r--r--sys/kern/sys_generic.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c
index de70348..bd0f279 100644
--- a/sys/kern/sys_generic.c
+++ b/sys/kern/sys_generic.c
@@ -1228,6 +1228,13 @@ pollscan(td, fds, nfd)
selfdalloc(td, fds);
fds->revents = fo_poll(fp, fds->events,
td->td_ucred, td);
+ /*
+ * POSIX requires POLLOUT to be never
+ * set simultaneously with POLLHUP.
+ */
+ if ((fds->revents & POLLHUP) != 0)
+ fds->revents &= ~POLLOUT;
+
if (fds->revents != 0)
n++;
}
OpenPOWER on IntegriCloud