]> granicus.if.org Git - libevent/commitdiff
Missed lock acquire/release in event_base_cancel_single_callback_()
authorAzat Khuzhin <a3at.mail@gmail.com>
Fri, 10 May 2013 16:22:56 +0000 (20:22 +0400)
committerNick Mathewson <nickm@torproject.org>
Sat, 11 May 2013 01:40:45 +0000 (21:40 -0400)
Call backtrace:
...
event_queue_remove_active()
event_callback_cancel_nolock_()
event_base_cancel_single_callback_()
event_base_free_()
event_base_free()
...

Fix for e9ebef83

event.c

diff --git a/event.c b/event.c
index 5a577e9f2312103334961a8b4cc2970f80cdb84c..3a7cb98fc0821a4b4159d34b4c9bb2db474f164c 100644 (file)
--- a/event.c
+++ b/event.c
@@ -721,7 +721,9 @@ event_base_cancel_single_callback_(struct event_base *base,
                        result = 1;
                }
        } else {
+               EVBASE_ACQUIRE_LOCK(base, th_base_lock);
                event_callback_cancel_nolock_(base, evcb, 1);
+               EVBASE_RELEASE_LOCK(base, th_base_lock);
                result = 1;
        }