diff options
author | Christopher Davis <chrisd@mangrin.org> | 2010-03-31 20:30:55 -0700 |
---|---|---|
committer | Christopher Davis <chrisd@mangrin.org> | 2010-03-31 23:38:34 -0700 |
commit | 850c3ff232659125262bb5e30bef8451fac386bf (patch) | |
tree | 70a0b33e9d67c6fc3c939fadefc85dc645d341ca /win32select.c | |
parent | c87272b7b91b4f443092eb2a81f03c83457ab03a (diff) | |
download | libevent-850c3ff232659125262bb5e30bef8451fac386bf.tar.gz |
Add evutil_tv_to_msec for safe conversion of timevals to milliseconds.
This is useful for backends that require their timeout values be in
milliseconds.
Diffstat (limited to 'win32select.c')
-rw-r--r-- | win32select.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/win32select.c b/win32select.c index 7dc68c91..a3b8dd7d 100644 --- a/win32select.c +++ b/win32select.c @@ -30,6 +30,7 @@ #include <windows.h> #include <sys/types.h> #include <sys/queue.h> +#include <limits.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> @@ -115,12 +116,6 @@ realloc_fd_sets(struct win32op *op, size_t new_size) } static int -timeval_to_ms(struct timeval *tv) -{ - return ((tv->tv_sec * 1000) + (tv->tv_usec / 1000)); -} - -static int do_fd_set(struct win32op *op, struct idx_info *ent, evutil_socket_t s, int read) { struct win_fd_set *set = read ? op->readset_in : op->writeset_in; @@ -303,8 +298,12 @@ win32_dispatch(struct event_base *base, struct timeval *tv) win32op->readset_out->fd_count : win32op->writeset_out->fd_count; if (!fd_count) { + long msec = evutil_tv_to_msec(tv); + /* Sleep's DWORD argument is unsigned long */ + if (msec < 0) + msec = LONG_MAX; /* Windows doesn't like you to call select() with no sockets */ - Sleep(timeval_to_ms(tv)); + Sleep(msec); evsig_process(base); return (0); } |