uloop: fix a segfault on deleting the first active timer from within another timer
authorFelix Fietkau <nbd@openwrt.org>
Tue, 23 Oct 2012 01:41:45 +0000 (03:41 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Tue, 23 Oct 2012 01:41:45 +0000 (03:41 +0200)
uloop.c

diff --git a/uloop.c b/uloop.c
index acf46db..aa09750 100644 (file)
--- a/uloop.c
+++ b/uloop.c
@@ -464,9 +464,11 @@ static int uloop_get_next_timeout(struct timeval *tv)
 
 static void uloop_process_timeouts(struct timeval *tv)
 {
-       struct uloop_timeout *t, *tmp;
+       struct uloop_timeout *t;
+
+       while (!list_empty(&timeouts)) {
+               t = list_first_entry(&timeouts, struct uloop_timeout, list);
 
-       list_for_each_entry_safe(t, tmp, &timeouts, list) {
                if (tv_diff(&t->time, tv) > 0)
                        break;