diff options
author | netchild <netchild@FreeBSD.org> | 2006-05-10 18:17:29 +0000 |
---|---|---|
committer | netchild <netchild@FreeBSD.org> | 2006-05-10 18:17:29 +0000 |
commit | 24c492f42c1f3598483abed69e3e2636b88bc2d2 (patch) | |
tree | fa471bf4cced56b25d7e9dca0c38878b1532c4bf /sys/compat | |
parent | 3747ef53419cdf3a75d078d7e2509fa3c44c049e (diff) | |
download | FreeBSD-src-24c492f42c1f3598483abed69e3e2636b88bc2d2.zip FreeBSD-src-24c492f42c1f3598483abed69e3e2636b88bc2d2.tar.gz |
Implement rt_sigpending in the linuxolator.
PR: 92671
Submitted by: Markus Niemist"o <markus.niemisto@gmx.net>
Diffstat (limited to 'sys/compat')
-rw-r--r-- | sys/compat/linux/linux_signal.c | 28 |
1 files changed, 28 insertions, 0 deletions
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 |