There seems to be some serious problem in set_timeout() function in
driver.c. The function is reproduced below...
======================================================================
void set_timeout(int timeleft)
/* reset the nonresponse-timeout */
{
#if !defined(__EMX__) && !defined(__BEOS__)
struct itimerval ntimeout;
if (timeleft == 0)
timeoutcount = 0;
ntimeout.it_interval.tv_sec = ntimeout.it_interval.tv_usec = 0;
ntimeout.it_value.tv_sec = timeleft;
ntimeout.it_value.tv_usec = 0;
setitimer(ITIMER_REAL, &ntimeout, (struct itimerval *)NULL);
#endif
}
======================================================================
So, if __EMX__ or __BEOS__ is defined, this function does not set any
timeout at all!
There is a more elaborate function interruptible_idle() in idle.c
which seems to be better handled than set_timeout(). It seems to work
on __EMX__ and SLEEP_WITH_ALARM, no mention of __BEOS__.
Probably, the code should be merged to get a better handling of
timeouts.
Sunil Shetye.