about summary refs log tree commit diff
path: root/src/thread
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2019-07-21 01:53:14 -0400
committerRich Felker <dalias@aerifal.cx>2019-07-27 02:46:57 -0400
commit331993e3fc3623f111d95796d3d7f30b4f6552c1 (patch)
treee17e0f0717b1f2ac3e49491d171934e5056566b7 /src/thread
parent0ce49d0a301b4142741b32773492af90f66ed3ca (diff)
downloadmusl-331993e3fc3623f111d95796d3d7f30b4f6552c1.tar.gz
musl-331993e3fc3623f111d95796d3d7f30b4f6552c1.tar.xz
musl-331993e3fc3623f111d95796d3d7f30b4f6552c1.zip
refactor thrd_sleep and nanosleep in terms of clock_nanosleep
for namespace-safety with thrd_sleep, this requires an alias, which is
also added. this eliminates all but one direct call point for
nanosleep syscalls, and arranges that 64-bit time_t conversion logic
will only need to exist in one file rather than three.

as a bonus, clock_nanosleep with CLOCK_REALTIME and empty flags is now
implemented as SYS_nanosleep, thereby working on older kernels that
may lack POSIX clocks functionality.
Diffstat (limited to 'src/thread')
-rw-r--r--src/thread/thrd_sleep.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/thread/thrd_sleep.c b/src/thread/thrd_sleep.c
index e8dfe400..97de5345 100644
--- a/src/thread/thrd_sleep.c
+++ b/src/thread/thrd_sleep.c
@@ -1,10 +1,11 @@
 #include <threads.h>
+#include <time.h>
 #include <errno.h>
 #include "syscall.h"
 
 int thrd_sleep(const struct timespec *req, struct timespec *rem)
 {
-	int ret = __syscall(SYS_nanosleep, req, rem);
+	int ret = -__clock_nanosleep(CLOCK_REALTIME, 0, req, rem);
 	switch (ret) {
 	case 0:      return 0;
 	case -EINTR: return -1; /* value specified by C11 */