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 |