From 24c492f42c1f3598483abed69e3e2636b88bc2d2 Mon Sep 17 00:00:00 2001 From: netchild Date: Wed, 10 May 2006 18:17:29 +0000 Subject: Implement rt_sigpending in the linuxolator. PR: 92671 Submitted by: Markus Niemist"o --- sys/compat/linux/linux_signal.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'sys/compat/linux/linux_signal.c') diff --git a/sys/compat/linux/linux_signal.c b/sys/compat/linux/linux_signal.c index 1fc5bb4..252e553 100644 --- a/sys/compat/linux/linux_signal.c +++ b/sys/compat/linux/linux_signal.c @@ -406,6 +406,34 @@ linux_sigpending(struct thread *td, struct linux_sigpending_args *args) mask = lset.__bits[0]; return (copyout(&mask, args->mask, sizeof(mask))); } + +/* + * MPSAFE + */ +int +linux_rt_sigpending(struct thread *td, struct linux_rt_sigpending_args *args) +{ + struct proc *p = td->td_proc; + sigset_t bset; + l_sigset_t lset; + + if (args->sigsetsize > sizeof(lset)) + return EINVAL; + /* NOT REACHED */ + +#ifdef DEBUG + if (ldebug(rt_sigpending)) + printf(ARGS(rt_sigpending, "*")); +#endif + + PROC_LOCK(p); + bset = p->p_siglist; + SIGSETOR(bset, td->td_siglist); + SIGSETAND(bset, td->td_sigmask); + PROC_UNLOCK(p); + bsd_to_linux_sigset(&bset, &lset); + return (copyout(&lset, args->set, args->sigsetsize)); +} #endif /*!__alpha__*/ int -- cgit v1.1