From: james Date: Wed, 9 Nov 2005 10:03:50 +0000 (+0000) Subject: Fixed update_time to use a better algorithm for X-Git-Tag: v2.1_rc1~86 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ba2ebecbedee53f00575b607e0a6c873b97ca4d1;p=thirdparty%2Fopenvpn.git Fixed update_time to use a better algorithm for preventing time backtracks even if the system clock backtracks. git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@789 e7ae566f-a301-0410-adde-c780ea21d3b5 --- diff --git a/otime.c b/otime.c index ad9cbbfea..14a52af0c 100644 --- a/otime.c +++ b/otime.c @@ -35,6 +35,7 @@ #include "memdbg.h" volatile time_t now; /* GLOBAL */ +unsigned int now_adj = 0; /* GLOBAL */ /* * Return a numerical string describing a struct timeval. diff --git a/otime.h b/otime.h index 002664616..09a85c74a 100644 --- a/otime.h +++ b/otime.h @@ -55,13 +55,16 @@ const char *tv_string (const struct timeval *tv, struct gc_arena *gc); const char *tv_string_abs (const struct timeval *tv, struct gc_arena *gc); extern volatile time_t now; /* updated frequently to time(NULL) */ +extern unsigned int now_adj; static inline void update_time (void) { - const time_t real_time = time (NULL); + const time_t real_time = time (NULL) + now_adj; if (real_time > now) now = real_time; + else if (real_time < now) + now_adj += (now - real_time); } static inline void