diff options
| author | Andrey A. Chernov <ache@FreeBSD.org> | 1997-08-12 19:47:01 +0000 | 
|---|---|---|
| committer | Andrey A. Chernov <ache@FreeBSD.org> | 1997-08-12 19:47:01 +0000 | 
| commit | b39d66c04ae615a15974e620682b4abddb7b6661 (patch) | |
| tree | 3cd945817b24b4c6a87945232a307adf11287113 /lib/libc/gen/sleep.c | |
| parent | 6d4ff454277c574edb42127b5e7aad703f13930a (diff) | |
Notes
Diffstat (limited to 'lib/libc/gen/sleep.c')
| -rw-r--r-- | lib/libc/gen/sleep.c | 19 | 
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/libc/gen/sleep.c b/lib/libc/gen/sleep.c index b553bf747636..d142a83f1d28 100644 --- a/lib/libc/gen/sleep.c +++ b/lib/libc/gen/sleep.c @@ -63,6 +63,7 @@ sleep(seconds)  	struct timespec time_remaining;  	if (seconds != 0) { +	again:  		/*  		 * XXX  		 * Hack to work around itimerfix(9) gratuitously limiting @@ -76,6 +77,15 @@ sleep(seconds)  		time_to_sleep.tv_sec = seconds;  		time_to_sleep.tv_nsec = 0;  		nanosleep(&time_to_sleep, &time_remaining); + +		if (rest != 0 && +		    time_remaining.tv_sec == 0 && +		    time_remaining.tv_nsec == 0) { +			seconds = rest; +			rest = 0; +			goto again; +		} +  		rest += time_remaining.tv_sec;  		if (time_remaining.tv_nsec > 0)  			rest++;      /* round up */ @@ -90,6 +100,7 @@ sleep(seconds)  	int alarm_blocked;  	if (seconds != 0) { +	again:  		/*  		 * XXX  		 * Hack to work around itimerfix(9) gratuitously limiting @@ -137,6 +148,14 @@ sleep(seconds)  			sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);  		} +		if (rest != 0 && +		    time_remaining.tv_sec == 0 && +		    time_remaining.tv_nsec == 0) { +			seconds = rest; +			rest = 0; +			goto again; +		} +  		/* return how long is left */  		rest += time_remaining.tv_sec;  		if (time_remaining.tv_nsec > 0)  | 
