diff options
author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2015-10-15 16:26:52 -0700 |
---|---|---|
committer | Robert Mustacchi <rm@joyent.com> | 2015-11-16 09:44:54 -0800 |
commit | 3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41 (patch) | |
tree | 7c90a77f5265b35f475932b34c933c63b5664a4e /usr/src/uts/common/os/sig.c | |
parent | f9eb9fdf196b6ed476e4ffc69cecd8b0da3cb7e7 (diff) | |
download | illumos-gate-3d729aecc03ea6ebb9bd5d56b8dccd24f57daa41.tar.gz |
6342 want signalfd support
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Igor Kozhukhov <ikozhukhov@gmail.com>
Reviewed by: Garrett D'Amore <garrett@damore.org>
Approved by: Dan McDonald <danmcd@omniti.com>
Diffstat (limited to 'usr/src/uts/common/os/sig.c')
-rw-r--r-- | usr/src/uts/common/os/sig.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/usr/src/uts/common/os/sig.c b/usr/src/uts/common/os/sig.c index 0b79c3765a..453b1f22d4 100644 --- a/usr/src/uts/common/os/sig.c +++ b/usr/src/uts/common/os/sig.c @@ -60,6 +60,7 @@ #include <sys/cyclic.h> #include <sys/dtrace.h> #include <sys/sdt.h> +#include <sys/signalfd.h> const k_sigset_t nullsmask = {0, 0, 0}; @@ -94,6 +95,12 @@ const k_sigset_t holdvfork = static int isjobstop(int); static void post_sigcld(proc_t *, sigqueue_t *); + +/* + * signalfd helper function which is set when the signalfd driver loads. + */ +void (*sigfd_exit_helper)(); + /* * Internal variables for counting number of user thread stop requests posted. * They may not be accurate at some special situation such as that a virtually @@ -307,6 +314,11 @@ sigtoproc(proc_t *p, kthread_t *t, int sig) (void) eat_signal(t, sig); thread_unlock(t); DTRACE_PROC2(signal__send, kthread_t *, t, int, sig); + if (p->p_sigfd != NULL && ((sigfd_proc_state_t *) + (p->p_sigfd))->sigfd_pollwake_cb != NULL) + (*((sigfd_proc_state_t *)(p->p_sigfd))-> + sigfd_pollwake_cb)(p, sig); + } else if ((tt = p->p_tlist) != NULL) { /* * Make sure that some lwp that already exists @@ -345,6 +357,10 @@ sigtoproc(proc_t *p, kthread_t *t, int sig) } DTRACE_PROC2(signal__send, kthread_t *, tt, int, sig); + if (p->p_sigfd != NULL && ((sigfd_proc_state_t *) + (p->p_sigfd))->sigfd_pollwake_cb != NULL) + (*((sigfd_proc_state_t *)(p->p_sigfd))-> + sigfd_pollwake_cb)(p, sig); } } |