Fix event loop timer update.
authorIskren Chernev <iskren.chernev@gmail.com>
Sun, 13 Mar 2011 14:59:30 +0000 (16:59 +0200)
committerIskren Chernev <iskren.chernev@gmail.com>
Mon, 14 Mar 2011 09:49:42 +0000 (11:49 +0200)
It can now handle delays greater than 2 seconds without overflowing.

wayland/event-loop.c

index bf2a9aa..7f58037 100644 (file)
@@ -231,8 +231,8 @@ wl_event_source_timer_update(struct wl_event_source *source, int ms_delay)
 
        its.it_interval.tv_sec = 0;
        its.it_interval.tv_nsec = 0;
-       its.it_value.tv_sec = 0;
-       its.it_value.tv_nsec = ms_delay * 1000 * 1000;
+       its.it_value.tv_sec = ms_delay / 1000;
+       its.it_value.tv_nsec = (ms_delay % 1000) * 1000 * 1000;
        if (timerfd_settime(timer_source->fd, 0, &its, NULL) < 0) {
                fprintf(stderr, "could not set timerfd\n: %m");
                return -1;