Browse Source

Merge branch 'bug7087_2' of ssh://git-rw.torproject.org/user/andrea/tor

Andrea Shepard 11 years ago
parent
commit
94a0309909
2 changed files with 26 additions and 4 deletions
  1. 10 0
      src/or/channel.c
  2. 16 4
      src/or/channeltls.c

+ 10 - 0
src/or/channel.c

@@ -848,6 +848,11 @@ channel_listener_free(channel_listener_t *chan_l)
 {
   if (!chan_l) return;
 
+  log_debug(LD_CHANNEL,
+            "Freeing channel_listener_t " U64_FORMAT " at %p",
+            U64_PRINTF_ARG(chan_l->global_identifier),
+            chan_l);
+
   /* It must be closed or errored */
   tor_assert(chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
              chan_l->state == CHANNEL_LISTENER_STATE_ERROR);
@@ -935,6 +940,11 @@ channel_listener_force_free(channel_listener_t *chan_l)
 {
   tor_assert(chan_l);
 
+  log_debug(LD_CHANNEL,
+            "Force-freeing channel_listener_t " U64_FORMAT " at %p",
+            U64_PRINTF_ARG(chan_l->global_identifier),
+            chan_l);
+
   /* Call a free method if there is one */
   if (chan_l->free) chan_l->free(chan_l);
 

+ 16 - 4
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,