aboutsummaryrefslogtreecommitdiff
path: root/sys/compat
diff options
context:
space:
mode:
authorDmitry Chagin <dchagin@FreeBSD.org>2015-06-20 05:40:35 +0000
committerDmitry Chagin <dchagin@FreeBSD.org>2015-06-20 05:40:35 +0000
commit3c91646b46a36e88b46b702325fa1e50fe865989 (patch)
treecdc0c8e61dc3fc8677851460c3b9465ad931a0f0 /sys/compat
parent3dede9f354254d838df84f9af8f7988029dee1b2 (diff)
downloadsrc-3c91646b46a36e88b46b702325fa1e50fe865989.tar.gz
src-3c91646b46a36e88b46b702325fa1e50fe865989.zip
Add EPOLLRDHUP support.
Tested by: abi at abinet dot ru
Notes
Notes: svn path=/head/; revision=284626
Diffstat (limited to 'sys/compat')
-rw-r--r--sys/compat/linux/linux_event.c4
-rw-r--r--sys/compat/linux/linux_event.h2
2 files changed, 5 insertions, 1 deletions
diff --git a/sys/compat/linux/linux_event.c b/sys/compat/linux/linux_event.c
index 403158823f5a..fcb57533bdc8 100644
--- a/sys/compat/linux/linux_event.c
+++ b/sys/compat/linux/linux_event.c
@@ -260,6 +260,8 @@ epoll_to_kevent(struct thread *td, struct file *epfp,
*kev_flags |= EV_CLEAR;
if ((levents & LINUX_EPOLLERR) != 0)
*kev_flags |= EV_ERROR;
+ if ((levents & LINUX_EPOLLRDHUP) != 0)
+ *kev_flags |= EV_EOF;
/* flags related to what event is registered */
if ((levents & LINUX_EPOLL_EVRD) != 0) {
@@ -309,6 +311,8 @@ kevent_to_epoll(struct kevent *kevent, struct epoll_event *l_event)
switch (kevent->filter) {
case EVFILT_READ:
l_event->events = LINUX_EPOLLIN|LINUX_EPOLLRDNORM|LINUX_EPOLLPRI;
+ if ((kevent->flags & EV_EOF) != 0)
+ l_event->events |= LINUX_EPOLLRDHUP;
break;
case EVFILT_WRITE:
l_event->events = LINUX_EPOLLOUT|LINUX_EPOLLWRNORM;
diff --git a/sys/compat/linux/linux_event.h b/sys/compat/linux/linux_event.h
index 0c030adcf8fd..9b7d37b006f0 100644
--- a/sys/compat/linux/linux_event.h
+++ b/sys/compat/linux/linux_event.h
@@ -49,7 +49,7 @@
|LINUX_EPOLLHUP|LINUX_EPOLLERR|LINUX_EPOLLPRI)
#define LINUX_EPOLL_EVWR (LINUX_EPOLLOUT|LINUX_EPOLLWRNORM)
#define LINUX_EPOLL_EVSUP (LINUX_EPOLLET|LINUX_EPOLLONESHOT \
- |LINUX_EPOLL_EVRD|LINUX_EPOLL_EVWR)
+ |LINUX_EPOLL_EVRD|LINUX_EPOLL_EVWR|LINUX_EPOLLRDHUP)
#define LINUX_EPOLL_CTL_ADD 1
#define LINUX_EPOLL_CTL_DEL 2