/*
* ion/libmainloop/signal.c
*
- * Copyright (c) Tuomo Valkonen 1999-2006.
+ * Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <unistd.h>
static WTimer *queue=NULL;
+int mainloop_gettime(struct timeval *val)
+{
+#ifdef _POSIX_MONOTONIC_CLOCK
+ struct timespec spec;
+ int ret;
+
+ ret=clock_gettime(CLOCK_MONOTONIC, &spec);
+
+ val->tv_sec=spec.tv_sec;
+ val->tv_usec=spec.tv_nsec/1000;
+
+ return ret;
+#else
+ return gettimeofday(&val, NULL);
+#endif
+}
+
+
#define TIMEVAL_LATER(a, b) \
((a.tv_sec > b.tv_sec) || \
((a.tv_sec == b.tv_sec) && \
}
/* Subtract queue time from current time, don't go below zero */
- gettimeofday(&(val.it_value), NULL);
+ mainloop_gettime(&(val.it_value));
if(TIMEVAL_LATER((queue)->when, val.it_value)){
if(queue->when.tv_usec<val.it_value.tv_usec){
queue->when.tv_usec+=USECS_IN_SEC;
/* Check for timer events in the queue */
while(had_tmr && queue!=NULL){
had_tmr=FALSE;
- gettimeofday(¤t_time, NULL);
+ mainloop_gettime(¤t_time);
while(queue!=NULL){
if(TIMEVAL_LATER(current_time, queue->when)){
q=queue;
{
long tmp_usec;
- gettimeofday(when, NULL);
+ mainloop_gettime(when);
tmp_usec=when->tv_usec + (msecs * 1000);
when->tv_usec=tmp_usec % 1000000;
when->tv_sec+=tmp_usec / 1000000;