From: Nick Mathewson Date: Fri, 22 May 2009 14:31:07 +0000 (+0000) Subject: Do not free the event base lock until we are done removing all the events. Spotted... X-Git-Tag: release-2.0.3-alpha~217 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=59cd49363c470195b892693e2c394f74ddc1f5ce;p=libevent Do not free the event base lock until we are done removing all the events. Spotted by Joachim Bauch; fixes bug 2795402. svn:r1302 --- diff --git a/ChangeLog b/ChangeLog index 684f7bd2..939a2693 100644 --- a/ChangeLog +++ b/ChangeLog @@ -31,7 +31,7 @@ Changes in 2.0.2-alpha: o Revise the new evbuffer_reserve_space/evbuffer_commit_space() interfaces so that you can use them without causing extraneous copies or leaving gaps in the evbuffer. o Add a new evbuffer_peek() interface to inspect data in an evbuffer without removing it. o Fix a deadlock when suspending reads in a bufferevent due to a full buffer. (Spotted by Joachim Bauch.) - + o Fix a memory error when freeing a thread-enabled event base with registered events. (Spotted by Joachim Bauch.) Changes in 2.0.1-alpha: o free minheap on event_base_free(); from Christopher Layne diff --git a/event.c b/event.c index 6e67ece5..0fdc9c81 100644 --- a/event.c +++ b/event.c @@ -334,8 +334,6 @@ event_base_free(struct event_base *base) base->th_notify_fd[1] = -1; } - EVTHREAD_FREE_LOCK(base->th_base_lock); - /* Delete all non-internal events. */ for (ev = TAILQ_FIRST(&base->eventqueue); ev; ) { struct event *next = TAILQ_NEXT(ev, ev_next); @@ -383,6 +381,8 @@ event_base_free(struct event_base *base) evmap_io_clear(&base->io); evmap_signal_clear(&base->sigmap); + EVTHREAD_FREE_LOCK(base->th_base_lock); + mm_free(base); }