diff options
author | Andrea Shepard <andrea@torproject.org> | 2012-10-15 13:04:55 -0700 |
---|---|---|
committer | Andrea Shepard <andrea@torproject.org> | 2012-10-15 13:04:55 -0700 |
commit | 94a030990986e6c731141da3969aeae3ec0f5ea8 (patch) | |
tree | e1bcadd9973653a26fe79a547c109115ea6094e6 | |
parent | 7e4c91e8808a1ca4b80b02661bd873e2ee636f67 (diff) | |
parent | ac227cf587c17fb2bdd10de4b320ea4df3632cd8 (diff) | |
download | tor-94a030990986e6c731141da3969aeae3ec0f5ea8.tar.gz tor-94a030990986e6c731141da3969aeae3ec0f5ea8.zip |
Merge branch 'bug7087_2' of ssh://git-rw.torproject.org/user/andrea/tor
-rw-r--r-- | src/or/channel.c | 10 | ||||
-rw-r--r-- | src/or/channeltls.c | 20 |
2 files changed, 26 insertions, 4 deletions
diff --git a/src/or/channel.c b/src/or/channel.c index d0e36cd282..49ce129585 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 4a949da8f1..234aa3111d 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, |