clean up tv/ts handling

This commit is contained in:
Marc Alexander Lehmann 2010-10-15 22:44:41 +00:00
parent bf9c8620f4
commit 616dbfae77
5 changed files with 9 additions and 21 deletions

12
ev.c
View File

@ -450,7 +450,6 @@ struct signalfd_siginfo
# endif
#endif
/**/
#if EV_VERIFY >= 3
@ -472,6 +471,9 @@ struct signalfd_siginfo
#define MIN_TIMEJUMP 1. /* minimum timejump that gets detected (if monotonic clock available) */
#define MAX_BLOCKTIME 59.743 /* never wait longer than this time (to detect time jumps) */
#define EV_TV_SET(tv,t) do { tv.tv_sec = (long)t; tv.tv_usec = (long)((t - tv.tv_sec) * 1e6); } while (0)
#define EV_TS_SET(ts,t) do { ts.tv_sec = (long)t; tv.tv_nsec = (long)((t - tv.tv_sec) * 1e9); } while (0)
#if __GNUC__ >= 4
# define expect(expr,value) __builtin_expect ((expr),(value))
# define noinline __attribute__ ((noinline))
@ -771,21 +773,17 @@ ev_sleep (ev_tstamp delay)
#if EV_USE_NANOSLEEP
struct timespec ts;
ts.tv_sec = (time_t)delay;
ts.tv_nsec = (long)((delay - (ev_tstamp)(ts.tv_sec)) * 1e9);
EV_SET_TS (ts, delay);
nanosleep (&ts, 0);
#elif defined(_WIN32)
Sleep ((unsigned long)(delay * 1e3));
#else
struct timeval tv;
tv.tv_sec = (time_t)delay;
tv.tv_usec = (long)((delay - (ev_tstamp)(tv.tv_sec)) * 1e6);
/* here we rely on sys/time.h + sys/types.h + unistd.h providing select */
/* something not guaranteed by newer posix versions, but guaranteed */
/* by older ones */
EV_SET_TV (tv, delay);
select (0, 0, 0, 0, &tv);
#endif
}

View File

@ -97,8 +97,7 @@ kqueue_poll (EV_P_ ev_tstamp timeout)
}
EV_RELEASE_CB;
ts.tv_sec = (time_t)timeout;
ts.tv_nsec = (long)((timeout - (ev_tstamp)ts.tv_sec) * 1e9);
EV_SET_TV (tv, timeout);
res = kevent (backend_fd, kqueue_changes, kqueue_changecnt, kqueue_events, kqueue_eventmax, &ts);
EV_ACQUIRE_CB;
kqueue_changecnt = 0;

View File

@ -86,8 +86,7 @@ port_poll (EV_P_ ev_tstamp timeout)
uint_t nget = 1;
EV_RELEASE_CB;
ts.tv_sec = (time_t)timeout;
ts.tv_nsec = ((long)(timeout - (ev_tstamp)ts.tv_sec) * 1e9);
EV_TS_SET (ts, timeout);
res = port_getn (backend_fd, port_events, port_eventmax, &nget, &ts);
EV_ACQUIRE_CB;

View File

@ -141,8 +141,7 @@ select_poll (EV_P_ ev_tstamp timeout)
int fd_setsize;
EV_RELEASE_CB;
tv.tv_sec = (long)timeout;
tv.tv_usec = (long)((timeout - (ev_tstamp)tv.tv_sec) * 1e6);
EV_TV_SET (tv, timeout);
#if EV_SELECT_USE_FD_SET
fd_setsize = sizeof (fd_set);

View File

@ -63,13 +63,6 @@ struct event_base
static struct event_base *ev_x_cur;
static void
ev_tv_set (struct timeval *tv, ev_tstamp at)
{
tv->tv_sec = (long)at;
tv->tv_usec = (long)((at - (ev_tstamp)tv->tv_sec) * 1e6);
}
static ev_tstamp
ev_tv_get (struct timeval *tv)
{
@ -305,7 +298,7 @@ int event_pending (struct event *ev, short events, struct timeval *tv)
revents |= EV_TIMEOUT;
if (tv)
ev_tv_set (tv, ev_now (EV_A)); /* not sure if this is right :) */
EV_TV_SET (tv, ev_now (EV_A)); /* not sure if this is right :) */
}
return events & revents;