uloop: Fix incorrect timeout
authorHelmut Schaa <helmut.schaa@googlemail.com>
Wed, 24 Jul 2013 12:51:55 +0000 (14:51 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Wed, 24 Jul 2013 13:01:19 +0000 (15:01 +0200)
uloop timeouts are calculated based on a time value that was fetched
before any callbacks were executed. Hence, the next timeout is off by
the time the callback execution took which can lead to strange side
effects.

Fix this by calculating the next timeout based on a fresh time value.

Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
uloop.c

diff --git a/uloop.c b/uloop.c
index 54ebe8d7b0ab05c7e1724ea3d05b1512f0ff9b6b..deb08a3bfa1396a00bc76229e82a17652d0555c1 100644 (file)
--- a/uloop.c
+++ b/uloop.c
@@ -632,6 +632,7 @@ void uloop_run(void)
 
                if (do_sigchld)
                        uloop_handle_processes();
+               uloop_gettime(&tv);
                uloop_run_events(uloop_get_next_timeout(&tv));
        }
 }