[tor-commits] [tor/master] Close and free channel_tls_listener correctly in channel_tls_free_all()
andrea at torproject.org
andrea at torproject.org
Mon Oct 15 20:05:33 UTC 2012
commit ac227cf587c17fb2bdd10de4b320ea4df3632cd8
Author: Andrea Shepard <andrea at torproject.org>
Date: Mon Oct 15 11:37:14 2012 -0700
Close and free channel_tls_listener correctly in channel_tls_free_all()
---
src/or/channeltls.c | 20 ++++++++++++++++----
1 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/src/or/channeltls.c b/src/or/channeltls.c
index 1a2956b..62bb18b 100644
--- a/src/or/channeltls.c
+++ b/src/or/channeltls.c
@@ -216,14 +216,26 @@ channel_tls_start_listener(void)
void
channel_tls_free_all(void)
{
+ channel_listener_t *old_listener = NULL;
+
log_debug(LD_CHANNEL,
"Shutting down TLS channels...");
if (channel_tls_listener) {
- channel_listener_unregister(channel_tls_listener);
- channel_listener_mark_for_close(channel_tls_listener);
- channel_listener_free(channel_tls_listener);
- channel_tls_listener = NULL;
+ /*
+ * When we close it, channel_tls_listener will get nulled out, so save
+ * a pointer so we can free it.
+ */
+ old_listener = channel_tls_listener;
+ log_debug(LD_CHANNEL,
+ "Closing channel_tls_listener with ID " U64_FORMAT
+ " at %p.",
+ U64_PRINTF_ARG(old_listener->global_identifier),
+ old_listener);
+ channel_listener_unregister(old_listener);
+ channel_listener_mark_for_close(old_listener);
+ channel_listener_free(old_listener);
+ tor_assert(channel_tls_listener == NULL);
}
log_debug(LD_CHANNEL,
More information about the tor-commits
mailing list