Print this page
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>

*** 8,18 **** * source. A copy of the CDDL is also available via the Internet at * http://www.illumos.org/license/CDDL. */ /* ! * Copyright 2016 Joyent, Inc. */ /* * Support for the signalfd facility, a Linux-borne facility for * file descriptor-based synchronous signal consumption. --- 8,18 ---- * source. A copy of the CDDL is also available via the Internet at * http://www.illumos.org/license/CDDL. */ /* ! * Copyright 2017 Joyent, Inc. */ /* * Support for the signalfd facility, a Linux-borne facility for * file descriptor-based synchronous signal consumption.
*** 558,568 **** set.__sigbits[1]) | (((p->p_sig.__sigbits[2] | t->t_sig.__sigbits[2]) & set.__sigbits[2]) & FILLSET2)); } - _NOTE(ARGSUSED(4)) static int signalfd_poll(dev_t dev, short events, int anyyet, short *reventsp, struct pollhead **phpp) { signalfd_state_t *state, **sstate; --- 558,567 ----
*** 579,589 **** if (signalfd_sig_pending(p, t, state->sfd_set) != 0) revents |= POLLRDNORM | POLLIN; mutex_exit(&state->sfd_lock); ! if (!(*reventsp = revents & events) && !anyyet) { sigfd_proc_state_t *pstate; sigfd_poll_waiter_t *pw; /* * Enable pollwakeup handling. --- 578,589 ---- if (signalfd_sig_pending(p, t, state->sfd_set) != 0) revents |= POLLRDNORM | POLLIN; mutex_exit(&state->sfd_lock); ! *reventsp = revents & events; ! if ((*reventsp == 0 && !anyyet) || (events & POLLET)) { sigfd_proc_state_t *pstate; sigfd_poll_waiter_t *pw; /* * Enable pollwakeup handling.