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.