summaryrefslogtreecommitdiff
path: root/win32select.c
diff options
context:
space:
mode:
authorChristopher Davis <chrisd@mangrin.org>2010-03-31 20:30:55 -0700
committerChristopher Davis <chrisd@mangrin.org>2010-03-31 23:38:34 -0700
commit850c3ff232659125262bb5e30bef8451fac386bf (patch)
tree70a0b33e9d67c6fc3c939fadefc85dc645d341ca /win32select.c
parentc87272b7b91b4f443092eb2a81f03c83457ab03a (diff)
downloadlibevent-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.c13
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);
}