From f812865cebf4b947f49670d64ff19c388f82d505 Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Sat, 19 Mar 2005 19:02:53 +0000 Subject: [PATCH] If it's available, try to use clock_gettime(CLOCK_MONOTONIC) rather than gettimeofday(), since the former shouldn't warp when the user resets the clock. [originally from svn r5528] --- unix/uxmisc.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/unix/uxmisc.c b/unix/uxmisc.c index 28ae83a2..0b04d211 100644 --- a/unix/uxmisc.c +++ b/unix/uxmisc.c @@ -4,21 +4,27 @@ #include #include +#include #include #include #include #include "putty.h" +/* + * We want to use milliseconds rather than microseconds or nanoseconds, + * because we need a decent number of them to fit into a 32-bit + * word so it can be used for keepalives. + */ unsigned long getticks(void) { struct timeval tv; +#ifdef CLOCK_MONOTONIC + struct timespec ts; + if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) + return ts.tv_sec * 1000 + ts.tv_nsec / 1000000; +#endif gettimeofday(&tv, NULL); - /* - * We want to use milliseconds rather than microseconds, - * because we need a decent number of them to fit into a 32-bit - * word so it can be used for keepalives. - */ return tv.tv_sec * 1000 + tv.tv_usec / 1000; }