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 | 22 | * THE SOFTWARE. |
| 23 | 23 | */ |
| 24 | 24 | #include "qemu-common.h" |
| 25 | +#include "qemu-timer.h" | |
| 25 | 26 | #include "qemu-char.h" |
| 26 | 27 | #include "slirp.h" |
| 27 | 28 | #include "hw/hw.h" |
| ... | ... | @@ -244,29 +245,6 @@ void slirp_cleanup(Slirp *slirp) |
| 244 | 245 | #define CONN_CANFRCV(so) (((so)->so_state & (SS_FCANTRCVMORE|SS_ISFCONNECTED)) == SS_ISFCONNECTED) |
| 245 | 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 | 248 | void slirp_select_fill(int *pnfds, |
| 271 | 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 | 383 | global_writefds = writefds; |
| 406 | 384 | global_xfds = xfds; |
| 407 | 385 | |
| 408 | - /* Update time */ | |
| 409 | - updtime(); | |
| 386 | + curtime = qemu_get_clock(rt_clock); | |
| 410 | 387 | |
| 411 | 388 | TAILQ_FOREACH(slirp, &slirp_instances, entry) { |
| 412 | 389 | /* | ... | ... |
slirp/slirp.h
| ... | ... | @@ -108,10 +108,6 @@ typedef unsigned char u_int8_t; |
| 108 | 108 | #include <arpa/inet.h> |
| 109 | 109 | #endif |
| 110 | 110 | |
| 111 | -#ifdef GETTIMEOFDAY_ONE_ARG | |
| 112 | -#define gettimeofday(x, y) gettimeofday(x) | |
| 113 | -#endif | |
| 114 | - | |
| 115 | 111 | /* Systems lacking strdup() definition in <string.h>. */ |
| 116 | 112 | #if defined(ultrix) |
| 117 | 113 | char *strdup(const char *); | ... | ... |
slirp/slirp_config.h