summaryrefslogtreecommitdiffstats
path: root/sys/compat
diff options
context:
space:
mode:
authornetchild <netchild@FreeBSD.org>2006-05-10 18:17:29 +0000
committernetchild <netchild@FreeBSD.org>2006-05-10 18:17:29 +0000
commit24c492f42c1f3598483abed69e3e2636b88bc2d2 (patch)
treefa471bf4cced56b25d7e9dca0c38878b1532c4bf /sys/compat
parent3747ef53419cdf3a75d078d7e2509fa3c44c049e (diff)
downloadFreeBSD-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.c28
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
OpenPOWER on IntegriCloud