diff options
| author | Yabin Cui <yabinc@google.com> | 2014-12-09 20:10:19 +0000 |
|---|---|---|
| committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-12-09 20:10:19 +0000 |
| commit | 94926f8cfa0adf37c4e19256ade7261a97f72e51 (patch) | |
| tree | 8c990320ebf445406d3d50be443db10cd58eee42 /libc/bionic | |
| parent | b033761cbf0e79ade9a8c956c2e63b42ee838183 (diff) | |
| parent | 634816055f51c536d24dea30dfe930b7fe2fa603 (diff) | |
| download | bionic-94926f8cfa0adf37c4e19256ade7261a97f72e51.zip bionic-94926f8cfa0adf37c4e19256ade7261a97f72e51.tar.gz bionic-94926f8cfa0adf37c4e19256ade7261a97f72e51.tar.bz2 | |
Merge "support _POSIX_REALTIME_SIGNALS"
Diffstat (limited to 'libc/bionic')
| -rw-r--r-- | libc/bionic/sigqueue.cpp | 46 | ||||
| -rw-r--r-- | libc/bionic/sigtimedwait.cpp | 38 | ||||
| -rw-r--r-- | libc/bionic/sigwaitinfo.cpp | 33 |
3 files changed, 117 insertions, 0 deletions
diff --git a/libc/bionic/sigqueue.cpp b/libc/bionic/sigqueue.cpp new file mode 100644 index 0000000..39c8798 --- /dev/null +++ b/libc/bionic/sigqueue.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <signal.h> +#include <string.h> +#include <sys/types.h> +#include <unistd.h> + +extern "C" int __rt_sigqueueinfo(pid_t, int, siginfo_t*); + +int sigqueue(pid_t pid, int signo, const sigval value) { + siginfo_t info; + memset(&info, 0, sizeof(siginfo_t)); + info.si_signo = signo; + info.si_code = SI_QUEUE; + info.si_pid = getpid(); + info.si_uid = getuid(); + info.si_value = value; + + return __rt_sigqueueinfo(pid, signo, &info); +} diff --git a/libc/bionic/sigtimedwait.cpp b/libc/bionic/sigtimedwait.cpp new file mode 100644 index 0000000..c29f806 --- /dev/null +++ b/libc/bionic/sigtimedwait.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <signal.h> + +#include "private/kernel_sigset_t.h" + +extern "C" int __rt_sigtimedwait(const sigset_t*, siginfo_t*, const timespec*, size_t); + +int sigtimedwait(const sigset_t* set, siginfo_t* info, const timespec* timeout) { + kernel_sigset_t sigset(set); + return __rt_sigtimedwait(sigset.get(), info, timeout, sizeof(sigset)); +} diff --git a/libc/bionic/sigwaitinfo.cpp b/libc/bionic/sigwaitinfo.cpp new file mode 100644 index 0000000..43e2395 --- /dev/null +++ b/libc/bionic/sigwaitinfo.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <signal.h> + +int sigwaitinfo(const sigset_t* set, siginfo_t* info) { + return sigtimedwait(set, info, NULL); +} |
