diff options
Diffstat (limited to 'libc/sysdeps/linux/common')
-rw-r--r-- | libc/sysdeps/linux/common/nanosleep.c | 33 |
1 files changed, 7 insertions, 26 deletions
diff --git a/libc/sysdeps/linux/common/nanosleep.c b/libc/sysdeps/linux/common/nanosleep.c index 1e692bbf0..dd3f4dd14 100644 --- a/libc/sysdeps/linux/common/nanosleep.c +++ b/libc/sysdeps/linux/common/nanosleep.c @@ -9,32 +9,13 @@ #include <sys/syscall.h> #include <time.h> +#include <cancel.h> -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ -#include <sysdep-cancel.h> -#include <pthreadP.h> -#else -#define SINGLE_THREAD_P 1 -#endif - -#define __NR___syscall_nanosleep __NR_nanosleep -static _syscall2(int, __syscall_nanosleep, const struct timespec *, req, +#define __NR___nanosleep_nocancel __NR_nanosleep +static _syscall2(int, __NC(nanosleep), const struct timespec *, req, struct timespec *, rem); -extern __typeof(nanosleep) __libc_nanosleep; - -int __libc_nanosleep(const struct timespec *req, struct timespec *rem) -{ - if (SINGLE_THREAD_P) - return __syscall_nanosleep(req, rem); - -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ - int oldtype = LIBC_CANCEL_ASYNC (); - int result = __syscall_nanosleep(req, rem); - LIBC_CANCEL_RESET (oldtype); - return result; -#endif -} - -weak_alias(__libc_nanosleep,nanosleep) -libc_hidden_weak(nanosleep) +CANCELLABLE_SYSCALL(int, nanosleep, + (const struct timespec *req, struct timespec *rem), + (req, rem)) +lt_libc_hidden(nanosleep) |