Subject: Re: race in sleep.
To: Paul Kranenburg <mira!cs.few.eur.nl!pk@werple.net.au>
From: John Birrell <cimaxp1!jb@werple.net.au>
List: tech-kern
Date: 10/17/1995 10:21:49
> 
> I just changed libc/gen/[u]sleep.c to be less susceptible to SIGALRMs
> coming in too late when other signal handlers are also active.
> 
> I also realized that the change makes another race possible:
> a previous SIGALRM handler might now miss a signal because the sihnal mask
> is reset earlier. I can't see a way out of this without adding one more
> system call (to the eight which are already there as smartly pointed out
> by th eman-page).
> 
> Thoughts?

For me it would be nice if [u]sleep didn't need to fiddle with signal handlers
at all. We often strike this sort of thing on systems which don't have a
nanosleep() function. We use a call to select() specifying the timeout value,
but with nfds set to zero. Then you only need one syscall to do the timeout,
but you need a gettimeofday() call before and after to find out how long you
slept. So that's 3 syscalls vs 8 and no race condition. 8-).

> 
> -pk
> 

BTW, while you're working on sleepy things, how about adding a nanosleep, then
changing both usleep and sleep to call that?

Regards,

-- 
John Birrell                                CIMlogic Pty Ltd
jb@cimlogic.com.au                          119 Cecil Street
Ph  +61  3 9690 9600                        South Melbourne Vic 3205
Fax +61  3 9690 6650                        Australia
Mob +61 18  353  137