[tor-commits] [tor/master] On exit, free the event_base and set its pointer to NULL.
nickm at torproject.org
nickm at torproject.org
Thu Jan 11 18:00:44 UTC 2018
commit 322abc030e53c7e84ca9f22a47b2965f262f5ffa
Author: Nick Mathewson <nickm at torproject.org>
Date: Mon Dec 11 11:33:54 2017 -0500
On exit, free the event_base and set its pointer to NULL.
When we didn't do this before, we'd have some still-reachable memory
warnings, and we'd find ourselves crashing when we tried to
reinitialize libevent.
Part of 24581 (don't crash when restarting Tor in-process)
---
src/common/compat_libevent.c | 10 ++++++++++
src/common/compat_libevent.h | 1 +
src/or/main.c | 1 +
3 files changed, 12 insertions(+)
diff --git a/src/common/compat_libevent.c b/src/common/compat_libevent.c
index 10489bf29..b5e9cc933 100644
--- a/src/common/compat_libevent.c
+++ b/src/common/compat_libevent.c
@@ -237,6 +237,16 @@ tor_init_libevent_rng(void)
return rv;
}
+/**
+ * Un-initialize libevent in preparation for an exit
+ */
+void
+tor_libevent_free_all(void)
+{
+ event_base_free(the_event_base);
+ the_event_base = NULL;
+}
+
#if defined(LIBEVENT_VERSION_NUMBER) && \
LIBEVENT_VERSION_NUMBER >= V(2,1,1) && \
!defined(TOR_UNIT_TESTS)
diff --git a/src/common/compat_libevent.h b/src/common/compat_libevent.h
index 0cdb73fbb..1853e5091 100644
--- a/src/common/compat_libevent.h
+++ b/src/common/compat_libevent.h
@@ -52,6 +52,7 @@ const char *tor_libevent_get_method(void);
void tor_check_libevent_header_compatibility(void);
const char *tor_libevent_get_version_str(void);
const char *tor_libevent_get_header_version_str(void);
+void tor_libevent_free_all(void);
int tor_init_libevent_rng(void);
diff --git a/src/or/main.c b/src/or/main.c
index aae98dd8a..bebe9fff4 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -3388,6 +3388,7 @@ tor_free_all(int postfork)
if (!postfork) {
release_lockfile();
}
+ tor_libevent_free_all();
/* Stuff in util.c and address.c*/
if (!postfork) {
escaped(NULL);
More information about the tor-commits
mailing list