aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrea Shepard <andrea@torproject.org>2012-10-15 13:04:55 -0700
committerAndrea Shepard <andrea@torproject.org>2012-10-15 13:04:55 -0700
commit94a030990986e6c731141da3969aeae3ec0f5ea8 (patch)
treee1bcadd9973653a26fe79a547c109115ea6094e6 /src
parent7e4c91e8808a1ca4b80b02661bd873e2ee636f67 (diff)
parentac227cf587c17fb2bdd10de4b320ea4df3632cd8 (diff)
downloadtor-94a030990986e6c731141da3969aeae3ec0f5ea8.tar
tor-94a030990986e6c731141da3969aeae3ec0f5ea8.tar.gz
Merge branch 'bug7087_2' of ssh://git-rw.torproject.org/user/andrea/tor
Diffstat (limited to 'src')
-rw-r--r--src/or/channel.c10
-rw-r--r--src/or/channeltls.c20
2 files changed, 26 insertions, 4 deletions
diff --git a/src/or/channel.c b/src/or/channel.c
index d0e36cd28..49ce12958 100644
--- a/src/or/channel.c
+++ b/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);
diff --git a/src/or/channeltls.c b/src/or/channeltls.c
index 4a949da8f..234aa3111 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,