X-Git-Url: https://git.decadent.org.uk/gitweb/?p=ion3.git;a=blobdiff_plain;f=libmainloop%2Fsignal.c;fp=libmainloop%2Fsignal.c;h=356fd6d71e495ffc6ea7844febc2d0ae7d9a3962;hp=fd37161b332689c7073b5065f930ab5e11549428;hb=2948134dc6273f6d3ea089c4cc273b69e2f8d51e;hpb=69ec7e63f6c39c98c82e8878e672215792ecfd7b diff --git a/libmainloop/signal.c b/libmainloop/signal.c index fd37161..356fd6d 100644 --- a/libmainloop/signal.c +++ b/libmainloop/signal.c @@ -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)){