From e8a60109fc91a42420ec626b63956771675f89b0 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Mon, 26 Feb 2018 22:19:43 +0100 Subject: [PATCH] Unconditionally remove timeouts from the queue before calling the callback. We are going to unlink the timeout from the splay tree anyway, so do it unconditionally before the callback, instead of waiting until after the callback to check whether or not to remove it based on its expiration time. --- src/event.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/event.c b/src/event.c index 331872a..33d205a 100644 --- a/src/event.c +++ b/src/event.c @@ -300,11 +300,9 @@ static struct timeval *get_time_remaining(struct timeval *diff) { timersub(&timeout->tv, &now, diff); if(diff->tv_sec < 0) { - timeout->cb(timeout->data); - - if(timercmp(&timeout->tv, &now, <)) { - timeout_del(timeout); - } + timeout_cb_t cb = timeout->cb; + timeout_del(timeout); + cb(timeout->data); } else { tv = diff; break; -- 2.25.1