X-Git-Url: https://git.decadent.org.uk/gitweb/?p=ion3.git;a=blobdiff_plain;f=libmainloop%2Fsignal.c;h=c5365532dd1b56d537d9150887df06a6b4385307;hp=fd37161b332689c7073b5065f930ab5e11549428;hb=e3aec18706513a87eaa7839dfdaf7e0fcd0d8d2a;hpb=801e83f399c5307749d9a1caa7ca43814bf343a1 diff --git a/libmainloop/signal.c b/libmainloop/signal.c index fd37161..c536553 100644 --- a/libmainloop/signal.c +++ b/libmainloop/signal.c @@ -1,7 +1,7 @@ /* * ion/libmainloop/signal.c * - * Copyright (c) Tuomo Valkonen 1999-2008. + * Copyright (c) Tuomo Valkonen 1999-2009. * * See the included file LICENSE for details. */ @@ -90,13 +90,13 @@ bool libmainloop_get_timeout(struct timeval *tv) mainloop_gettime(tv); if(TIMEVAL_LATER((queue)->when, (*tv))){ if(queue->when.tv_usectv_usec){ - queue->when.tv_usec+=USECS_IN_SEC; - queue->when.tv_sec--; + tv->tv_usec=(queue->when.tv_usec+USECS_IN_SEC)-tv->tv_usec; + /* TIMEVAL_LATER ensures >= 0 */ + tv->tv_sec=(queue->when.tv_sec-1)-tv->tv_sec; + }else{ + tv->tv_usec=queue->when.tv_usec-tv->tv_usec; + tv->tv_sec=queue->when.tv_sec-tv->tv_sec; } - tv->tv_usec=queue->when.tv_usec-tv->tv_usec; - tv->tv_sec=queue->when.tv_sec-tv->tv_sec; - if(tv->tv_usec<0) - tv->tv_usec=0; /* POSIX and some kernels have been designed by absolute morons and * contain idiotic artificial restrictions on the value of tv_usec, * that will only cause more code being run and clock cycles being @@ -226,8 +226,10 @@ bool mainloop_check_signals() return kill_sig; /* Check for timer events in the queue */ - while(had_tmr && queue!=NULL){ + while(had_tmr){ had_tmr=FALSE; + if(queue==NULL) + break; mainloop_gettime(¤t_time); while(queue!=NULL){ if(TIMEVAL_LATER(current_time, queue->when)){