diff options
Diffstat (limited to 'usr/src/uts/common/io/signalfd.c')
-rw-r--r-- | usr/src/uts/common/io/signalfd.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/usr/src/uts/common/io/signalfd.c b/usr/src/uts/common/io/signalfd.c index 883c81d2ce..2a1cf25917 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. */ /* @@ -107,6 +107,7 @@ #include <sys/schedctl.h> #include <sys/id_space.h> #include <sys/sdt.h> +#include <sys/brand.h> #include <sys/disp.h> #include <sys/taskq_impl.h> @@ -459,6 +460,9 @@ consume_signal(k_sigset_t set, uio_t *uio, boolean_t block) lwp->lwp_extsig = 0; mutex_exit(&p->p_lock); + if (PROC_IS_BRANDED(p) && BROP(p)->b_sigfd_translate) + BROP(p)->b_sigfd_translate(infop); + /* Convert k_siginfo into external, datamodel independent, struct. */ bzero(ssp, sizeof (*ssp)); ssp->ssi_signo = infop->si_signo; @@ -560,7 +564,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 +584,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; |