From: Todd C. Miller Date: Fri, 1 Nov 2013 22:54:49 +0000 (-0600) Subject: Don't call sudo_ev_{add,del}_impl() for timeout-only events. This X-Git-Tag: SUDO_1_8_9^2~121 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1a548a5ddaa491c95d54c175caa36a49437b9862;p=sudo Don't call sudo_ev_{add,del}_impl() for timeout-only events. This makes it possible to pass sudo_ev_alloc() an fd of -1 for events only use SUDO_EV_TIMEOUT. --- diff --git a/common/event.c b/common/event.c index 8301705db..a7bdf7e6b 100644 --- a/common/event.c +++ b/common/event.c @@ -143,8 +143,10 @@ sudo_ev_add(struct sudo_event_base *base, struct sudo_event *ev, /* Add event to the base. */ sudo_debug_printf(SUDO_DEBUG_INFO, "%s: adding event %p to base %p", __func__, ev, base); - if (sudo_ev_add_impl(base, ev) != 0) - debug_return_int(-1); + if (ev->events & (SUDO_EV_READ|SUDO_EV_WRITE)) { + if (sudo_ev_add_impl(base, ev) != 0) + debug_return_int(-1); + } ev->base = base; if (tohead) { TAILQ_INSERT_HEAD(&base->events, ev, entries); @@ -208,8 +210,10 @@ sudo_ev_del(struct sudo_event_base *base, struct sudo_event *ev) __func__, ev, base); /* Call backend. */ - if (sudo_ev_del_impl(base, ev) != 0) - debug_return_int(-1); + if (ev->events & (SUDO_EV_READ|SUDO_EV_WRITE)) { + if (sudo_ev_del_impl(base, ev) != 0) + debug_return_int(-1); + } /* Unlink from event list. */ TAILQ_REMOVE(&base->events, ev, entries);