Commit aaf10d9d2e14ceed03b75f24494fb3e8c4d15d57
Committed by
Anthony Liguori
1 parent
97df1ee5
slirp: Use monotonic clock if available (v2)
Calling gettimeofday() to compute a time interval can cause problems if the system clock jumps forwards or backwards; replace updtime() with qemu_get_clock(rt_clock), which calls clock_gettime(CLOCK_MONOTONIC) if it is available. Also remove some useless macros. Signed-off-by: Ed Swierk <eswierk@aristanetworks.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Showing
3 changed files
with
2 additions
and
32 deletions
slirp/slirp.c
| @@ -22,6 +22,7 @@ | @@ -22,6 +22,7 @@ | ||
| 22 | * THE SOFTWARE. | 22 | * THE SOFTWARE. |
| 23 | */ | 23 | */ |
| 24 | #include "qemu-common.h" | 24 | #include "qemu-common.h" |
| 25 | +#include "qemu-timer.h" | ||
| 25 | #include "qemu-char.h" | 26 | #include "qemu-char.h" |
| 26 | #include "slirp.h" | 27 | #include "slirp.h" |
| 27 | #include "hw/hw.h" | 28 | #include "hw/hw.h" |
| @@ -244,29 +245,6 @@ void slirp_cleanup(Slirp *slirp) | @@ -244,29 +245,6 @@ void slirp_cleanup(Slirp *slirp) | ||
| 244 | #define CONN_CANFRCV(so) (((so)->so_state & (SS_FCANTRCVMORE|SS_ISFCONNECTED)) == SS_ISFCONNECTED) | 245 | #define CONN_CANFRCV(so) (((so)->so_state & (SS_FCANTRCVMORE|SS_ISFCONNECTED)) == SS_ISFCONNECTED) |
| 245 | #define UPD_NFDS(x) if (nfds < (x)) nfds = (x) | 246 | #define UPD_NFDS(x) if (nfds < (x)) nfds = (x) |
| 246 | 247 | ||
| 247 | -/* | ||
| 248 | - * curtime kept to an accuracy of 1ms | ||
| 249 | - */ | ||
| 250 | -#ifdef _WIN32 | ||
| 251 | -static void updtime(void) | ||
| 252 | -{ | ||
| 253 | - struct _timeb tb; | ||
| 254 | - | ||
| 255 | - _ftime(&tb); | ||
| 256 | - | ||
| 257 | - curtime = tb.time * 1000 + tb.millitm; | ||
| 258 | -} | ||
| 259 | -#else | ||
| 260 | -static void updtime(void) | ||
| 261 | -{ | ||
| 262 | - struct timeval tv; | ||
| 263 | - | ||
| 264 | - gettimeofday(&tv, NULL); | ||
| 265 | - | ||
| 266 | - curtime = tv.tv_sec * 1000 + tv.tv_usec / 1000; | ||
| 267 | -} | ||
| 268 | -#endif | ||
| 269 | - | ||
| 270 | void slirp_select_fill(int *pnfds, | 248 | void slirp_select_fill(int *pnfds, |
| 271 | fd_set *readfds, fd_set *writefds, fd_set *xfds) | 249 | fd_set *readfds, fd_set *writefds, fd_set *xfds) |
| 272 | { | 250 | { |
| @@ -405,8 +383,7 @@ void slirp_select_poll(fd_set *readfds, fd_set *writefds, fd_set *xfds, | @@ -405,8 +383,7 @@ void slirp_select_poll(fd_set *readfds, fd_set *writefds, fd_set *xfds, | ||
| 405 | global_writefds = writefds; | 383 | global_writefds = writefds; |
| 406 | global_xfds = xfds; | 384 | global_xfds = xfds; |
| 407 | 385 | ||
| 408 | - /* Update time */ | ||
| 409 | - updtime(); | 386 | + curtime = qemu_get_clock(rt_clock); |
| 410 | 387 | ||
| 411 | TAILQ_FOREACH(slirp, &slirp_instances, entry) { | 388 | TAILQ_FOREACH(slirp, &slirp_instances, entry) { |
| 412 | /* | 389 | /* |
slirp/slirp.h
| @@ -108,10 +108,6 @@ typedef unsigned char u_int8_t; | @@ -108,10 +108,6 @@ typedef unsigned char u_int8_t; | ||
| 108 | #include <arpa/inet.h> | 108 | #include <arpa/inet.h> |
| 109 | #endif | 109 | #endif |
| 110 | 110 | ||
| 111 | -#ifdef GETTIMEOFDAY_ONE_ARG | ||
| 112 | -#define gettimeofday(x, y) gettimeofday(x) | ||
| 113 | -#endif | ||
| 114 | - | ||
| 115 | /* Systems lacking strdup() definition in <string.h>. */ | 111 | /* Systems lacking strdup() definition in <string.h>. */ |
| 116 | #if defined(ultrix) | 112 | #if defined(ultrix) |
| 117 | char *strdup(const char *); | 113 | char *strdup(const char *); |
slirp/slirp_config.h
| @@ -187,9 +187,6 @@ | @@ -187,9 +187,6 @@ | ||
| 187 | #define NO_UNIX_SOCKETS | 187 | #define NO_UNIX_SOCKETS |
| 188 | #endif | 188 | #endif |
| 189 | 189 | ||
| 190 | -/* Define if gettimeofday only takes one argument */ | ||
| 191 | -#undef GETTIMEOFDAY_ONE_ARG | ||
| 192 | - | ||
| 193 | /* Define if you have revoke() */ | 190 | /* Define if you have revoke() */ |
| 194 | #undef HAVE_REVOKE | 191 | #undef HAVE_REVOKE |
| 195 | 192 |