From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MTkci-0001xO-Qw for qemu-devel@nongnu.org; Wed, 22 Jul 2009 18:49:20 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MTkce-0001vG-26 for qemu-devel@nongnu.org; Wed, 22 Jul 2009 18:49:20 -0400 Received: from [199.232.76.173] (port=35662 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MTkcd-0001vA-RQ for qemu-devel@nongnu.org; Wed, 22 Jul 2009 18:49:15 -0400 Received: from mail-px0-f201.google.com ([209.85.216.201]:55453) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MTkcd-0005pS-DG for qemu-devel@nongnu.org; Wed, 22 Jul 2009 18:49:15 -0400 Received: by pxi39 with SMTP id 39so327594pxi.4 for ; Wed, 22 Jul 2009 15:49:11 -0700 (PDT) From: Ed Swierk Content-Type: text/plain Date: Wed, 22 Jul 2009 15:49:05 -0700 Message-Id: <1248302945.14831.4.camel@localhost.localdomain> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH] slirp: Use monotonic clock if available List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Calling gettimeofday() to compute a time interval can cause problems if the system clock jumps forwards or backwards; use clock_gettime(CLOCK_MONOTONIC) instead if it is available. Also remove some useless macros. Signed-off-by: Ed Swierk --- diff --git a/slirp/slirp.c b/slirp/slirp.c index 4bc8a9d..3214c29 100644 --- a/slirp/slirp.c +++ b/slirp/slirp.c @@ -258,25 +258,30 @@ void slirp_cleanup(Slirp *slirp) /* * curtime kept to an accuracy of 1ms */ -#ifdef _WIN32 static void updtime(void) { +#ifdef _WIN32 struct _timeb tb; _ftime(&tb); curtime = tb.time * 1000 + tb.millitm; -} #else -static void updtime(void) -{ +#ifdef CLOCK_MONOTONIC + struct timespec tv; + + clock_gettime(CLOCK_MONOTONIC, &tv); + + curtime = tv.tv_sec * 1000 + tv.tv_nsec / 1000000; +#else struct timeval tv; gettimeofday(&tv, NULL); curtime = tv.tv_sec * 1000 + tv.tv_usec / 1000; -} #endif +#endif +} void slirp_select_fill(int *pnfds, fd_set *readfds, fd_set *writefds, fd_set *xfds) diff --git a/slirp/slirp.h b/slirp/slirp.h index 22058cd..020412c 100644 --- a/slirp/slirp.h +++ b/slirp/slirp.h @@ -108,10 +108,6 @@ typedef unsigned char u_int8_t; #include #endif -#ifdef GETTIMEOFDAY_ONE_ARG -#define gettimeofday(x, y) gettimeofday(x) -#endif - /* Systems lacking strdup() definition in . */ #if defined(ultrix) char *strdup(const char *); diff --git a/slirp/slirp_config.h b/slirp/slirp_config.h index dbc8dfd..5a0e6c1 100644 --- a/slirp/slirp_config.h +++ b/slirp/slirp_config.h @@ -190,9 +190,6 @@ #define NO_UNIX_SOCKETS #endif -/* Define if gettimeofday only takes one argument */ -#undef GETTIMEOFDAY_ONE_ARG - /* Define if you have revoke() */ #undef HAVE_REVOKE