diff options
author | Patrick Mooney <pmooney@pfmooney.com> | 2017-09-22 23:43:19 +0000 |
---|---|---|
committer | Dan McDonald <danmcd@joyent.com> | 2017-10-18 22:47:16 -0400 |
commit | 80d5689f5d4588adc071138e25e9d0d5252d9b55 (patch) | |
tree | cc01d70fa3d12753675ad425a28ef50a12078dbf /usr/src/uts/common/io/signalfd.c | |
parent | ad3ad82ad2fb99c424a8482bd1908d08b990ccea (diff) | |
download | illumos-joyent-80d5689f5d4588adc071138e25e9d0d5252d9b55.tar.gz |
8634 epoll fails to wake on certain edge-triggered conditions
8635 epoll should not emit POLLNVAL
8636 recursive epoll should emit EPOLLRDNORM
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Toomas Soome <tsoome@me.com>
Reviewed by: Igor Kozhukhov <igor@dilos.org>
Approved by: Dan McDonald <danmcd@joyent.com>
Diffstat (limited to 'usr/src/uts/common/io/signalfd.c')
-rw-r--r-- | usr/src/uts/common/io/signalfd.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/usr/src/uts/common/io/signalfd.c b/usr/src/uts/common/io/signalfd.c index 883c81d2ce..6416d6d45a 100644 --- a/usr/src/uts/common/io/signalfd.c +++ b/usr/src/uts/common/io/signalfd.c @@ -10,7 +10,7 @@ */ /* - * Copyright 2016 Joyent, Inc. + * Copyright 2017 Joyent, Inc. */ /* @@ -560,7 +560,6 @@ signalfd_sig_pending(proc_t *p, kthread_t *t, k_sigset_t set) set.__sigbits[2]) & FILLSET2)); } -_NOTE(ARGSUSED(4)) static int signalfd_poll(dev_t dev, short events, int anyyet, short *reventsp, struct pollhead **phpp) @@ -581,7 +580,8 @@ signalfd_poll(dev_t dev, short events, int anyyet, short *reventsp, mutex_exit(&state->sfd_lock); - if (!(*reventsp = revents & events) && !anyyet) { + *reventsp = revents & events; + if ((*reventsp == 0 && !anyyet) || (events & POLLET)) { sigfd_proc_state_t *pstate; sigfd_poll_waiter_t *pw; |