commit 322abc030e53c7e84ca9f22a47b2965f262f5ffa Author: Nick Mathewson nickm@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);
tor-commits@lists.torproject.org