]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Close and free channel_tls_listener correctly in channel_tls_free_all()
authorAndrea Shepard <andrea@torproject.org>
Mon, 15 Oct 2012 18:37:14 +0000 (11:37 -0700)
committerAndrea Shepard <andrea@torproject.org>
Mon, 15 Oct 2012 19:22:20 +0000 (12:22 -0700)
src/or/channeltls.c

index 1a2956b75555825703361790893d31885645ad6e..62bb18bb8d6c65a50b1225b18fbd04cd36dcf607 100644 (file)
@@ -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,