diff options
author | Martin Willi <martin@strongswan.org> | 2006-05-30 14:56:12 +0000 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2006-05-30 14:56:12 +0000 |
commit | 2d6c3bce06861c63e341a20ba5f0ec9420c62f17 (patch) | |
tree | f73432bc9057bd0f43de6a4fddfbb6cce2a9e84c | |
parent | b93782903fb1463ec3bd5fcee325d485a26f85b9 (diff) | |
download | strongswan-2d6c3bce06861c63e341a20ba5f0ec9420c62f17.tar.bz2 strongswan-2d6c3bce06861c63e341a20ba5f0ec9420c62f17.tar.xz |
-rw-r--r-- | src/charon/queues/event_queue.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/charon/queues/event_queue.c b/src/charon/queues/event_queue.c index ea69435c3..39681928c 100644 --- a/src/charon/queues/event_queue.c +++ b/src/charon/queues/event_queue.c @@ -121,11 +121,12 @@ struct private_event_queue_t { */ static long time_difference(struct timeval *end_time, struct timeval *start_time) { - long seconds, microseconds; + time_t s; + suseconds_t us; - seconds = (end_time->tv_sec - start_time->tv_sec); - microseconds = (end_time->tv_usec - start_time->tv_usec); - return ((seconds * 1000) + microseconds/1000); + s = (end_time->tv_sec - start_time->tv_sec); + us = (end_time->tv_usec - start_time->tv_usec); + return ((s * 1000) + us/1000); } /** @@ -278,13 +279,15 @@ static void add_relative(event_queue_t *this, job_t *job, u_int32_t ms) { timeval_t current_time; timeval_t time; - int micros = ms * 1000; - + + time_t s = ms / 1000; + suseconds_t us = (ms - s * 1000) * 1000; + gettimeofday(¤t_time, NULL); - - time.tv_usec = ((current_time.tv_usec + micros) % 1000000); - time.tv_sec = current_time.tv_sec + ((current_time.tv_usec + micros)/ 1000000); - + + time.tv_usec = (current_time.tv_usec + us) % 1000000; + time.tv_sec = current_time.tv_sec + (current_time.tv_usec + us)/1000000 + s; + this->add_absolute(this, job, time); } |