diff options
Diffstat (limited to 'lib/libc/gen/usleep.c')
| -rw-r--r-- | lib/libc/gen/usleep.c | 19 | 
1 files changed, 18 insertions, 1 deletions
| diff --git a/lib/libc/gen/usleep.c b/lib/libc/gen/usleep.c index 3f4a7f538b45..9e29f314d959 100644 --- a/lib/libc/gen/usleep.c +++ b/lib/libc/gen/usleep.c @@ -38,7 +38,10 @@ static char sccsid[] = "@(#)usleep.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	TICK	10000		/* system clock resolution in microseconds */  #define	USPS	1000000		/* number of microseconds in a second */ @@ -46,11 +49,22 @@ static char sccsid[] = "@(#)usleep.c	8.1 (Berkeley) 6/4/93";  	vec.sv_handler = a; vec.sv_mask = vec.sv_onstack = 0  static int ringring; +#endif +  void  usleep(useconds)  	unsigned int useconds;  { +#ifdef _THREAD_SAFE +    struct timespec time_to_sleep; + +    if (useconds) { +        time_to_sleep.ts_nsec = (useconds % 1000000) * 1000; +        time_to_sleep.ts_sec = useconds / 1000000; +        nanosleep(&time_to_sleep,NULL); +    } +#else  	register struct itimerval *itp;  	struct itimerval itv, oitv;  	struct sigvec vec, ovec; @@ -90,10 +104,13 @@ usleep(useconds)  	(void) sigvec(SIGALRM, &ovec, (struct sigvec *)0);  	(void) sigsetmask(omask);  	(void) setitimer(ITIMER_REAL, &oitv, (struct itimerval *)0); +#endif  } +#ifndef  _THREAD_SAFE  static void  sleephandler()  {  	ringring = 1;  } +#endif | 
