From e6313a37d6c5db34a5a0338e1220b031381d2518 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Sun, 29 Jun 2008 13:47:25 +0200 Subject: [PATCH] [MINOR] introduce now_ms, the current date in milliseconds This new time value will be used to compute timeouts and wait queue positions. The operation is made once for all when time is retrieved. A future improvement might consist in having it in ticks of 1/1024 second and to convert all timeouts into ticks. --- include/common/time.h | 1 + src/time.c | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/include/common/time.h b/include/common/time.h index 82ec402cc..7dbed6d73 100644 --- a/include/common/time.h +++ b/include/common/time.h @@ -54,6 +54,7 @@ #define MINTIME(old, new) (((new)<0)?(old):(((old)<0||(new)<(old))?(new):(old))) #define SETNOW(a) (*a=now) +extern unsigned int now_ms; /* internal date in milliseconds (may wrap) */ extern struct timeval now; /* internal date is a monotonic function of real clock */ extern struct timeval date; /* the real current date */ extern struct timeval start_date; /* the process's start date */ diff --git a/src/time.c b/src/time.c index f637f6c78..5318dcdf2 100644 --- a/src/time.c +++ b/src/time.c @@ -16,6 +16,7 @@ #include #include +unsigned int now_ms; /* internal date in milliseconds (may wrap) */ struct timeval now; /* internal date is a monotonic function of real clock */ struct timeval date; /* the real current date */ struct timeval start_date; /* the process's start date */ @@ -162,7 +163,7 @@ REGPRM2 void tv_update_date(int max_wait, int interrupted) if (unlikely(max_wait < 0)) { tv_zero(&tv_offset); now = date; - return; + goto to_ms; } __tv_add(&adjusted, &date, &tv_offset); if (unlikely(__tv_islt(&adjusted, &now))) { @@ -178,7 +179,7 @@ REGPRM2 void tv_update_date(int max_wait, int interrupted) goto fixup; /* jump in the future */ } now = adjusted; - return; + goto to_ms; fixup: /* Large jump. If the poll was interrupted, we consider that the date * has not changed (immediate wake-up), otherwise we add the poll @@ -192,6 +193,8 @@ REGPRM2 void tv_update_date(int max_wait, int interrupted) tv_offset.tv_usec += 1000000; tv_offset.tv_sec--; } + to_ms: + now_ms = now.tv_sec * 1000 + now.tv_usec / 1000; return; }