/*
* ion/libmainloop/signal.c
*
- * Copyright (c) Tuomo Valkonen 1999-2008.
+ * Copyright (c) Tuomo Valkonen 1999-2009.
*
* See the included file LICENSE for details.
*/
mainloop_gettime(tv);
if(TIMEVAL_LATER((queue)->when, (*tv))){
if(queue->when.tv_usec<tv->tv_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
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)){