From 40830f16445d036728313c70816f2bfa2d9333e0 Mon Sep 17 00:00:00 2001 From: John Ohl Date: Mon, 27 Jan 2014 13:03:36 -0500 Subject: [PATCH] Tweaked callbacks to prevent race condition (https://github.com/libevent/libevent/issues/104) --- event.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/event.c b/event.c index c946cbf9..b97f1dbf 100644 --- a/event.c +++ b/event.c @@ -1495,8 +1495,15 @@ event_persist_closure(struct event_base *base, struct event *ev) run_at.tv_usec |= usec_mask; event_add_nolock_(ev, &run_at, 1); } - EVBASE_RELEASE_LOCK(base, th_base_lock); - (*ev->ev_callback)(ev->ev_fd, ev->ev_res, ev->ev_arg); + + // Get our callback before we release the lock + void (*evcb_callback)(evutil_socket_t, short, void *) = *ev->ev_callback; + + // Release the lock + EVBASE_RELEASE_LOCK(base, th_base_lock); + + // Execute the callback + (evcb_callback)(ev->ev_fd, ev->ev_res, ev->ev_arg); } /* -- 2.40.0