diff options
Diffstat (limited to 'lib/libc/gen/sleep.c')
-rw-r--r-- | lib/libc/gen/sleep.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/libc/gen/sleep.c b/lib/libc/gen/sleep.c index 98d997d..b06475d 100644 --- a/lib/libc/gen/sleep.c +++ b/lib/libc/gen/sleep.c @@ -38,16 +38,33 @@ static char sccsid[] = "@(#)sleep.c 8.1 (Berkeley) 6/4/93"; #include <sys/time.h> #include <signal.h> #include <unistd.h> +#ifdef _THREAD_SAFE +#include <pthread.h> +#include "pthread_private.h" +#else #define setvec(vec, a) \ vec.sv_handler = a; vec.sv_mask = vec.sv_onstack = 0 static int ringring; +#endif unsigned int sleep(seconds) unsigned int seconds; { +#ifdef _THREAD_SAFE + struct timespec time_to_sleep; + struct timespec time_remaining; + + if (seconds) { + time_to_sleep.ts_sec = seconds; + time_to_sleep.ts_nsec = 0; + nanosleep(&time_to_sleep,&time_remaining); + seconds = time_remaining.ts_sec; + } + return(seconds); +#else register struct itimerval *itp; struct itimerval itv, oitv; struct sigvec vec, ovec; @@ -88,10 +105,13 @@ sleep(seconds) (void) sigsetmask(omask); (void) setitimer(ITIMER_REAL, &oitv, (struct itimerval *)0); return 0; +#endif } +#ifndef _THREAD_SAFE static void sleephandler() { ringring = 1; } +#endif |