From 97d6bee3fcac17080775576b140d041d97ccd411 Mon Sep 17 00:00:00 2001 From: Praveen Kumar Date: Wed, 22 Nov 2017 17:59:59 +0000 Subject: [PATCH] FS-10805: Memory Leak fix in mod_amqp Memory allocated to hash iterators and hash tables isn't released during module shutdown. With these changes, memory allocated to hash iterators and hash tables will be freed properly. --- src/mod/event_handlers/mod_amqp/mod_amqp.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/mod/event_handlers/mod_amqp/mod_amqp.c b/src/mod/event_handlers/mod_amqp/mod_amqp.c index e5deaf745a..cd8dcf849b 100644 --- a/src/mod/event_handlers/mod_amqp/mod_amqp.c +++ b/src/mod/event_handlers/mod_amqp/mod_amqp.c @@ -86,7 +86,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_amqp_load) */ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_amqp_shutdown) { - switch_hash_index_t *hi; + switch_hash_index_t *hi = NULL; mod_amqp_producer_profile_t *producer; mod_amqp_command_profile_t *command; mod_amqp_logging_profile_t *logging; @@ -94,22 +94,26 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_amqp_shutdown) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Mod starting shutting down\n"); switch_event_unbind_callback(mod_amqp_producer_event_handler); - while ((hi = switch_core_hash_first(mod_amqp_globals.producer_hash))) { + while ((hi = switch_core_hash_first_iter(mod_amqp_globals.producer_hash, hi))) { switch_core_hash_this(hi, NULL, NULL, (void **)&producer); mod_amqp_producer_destroy(&producer); } - while ((hi = switch_core_hash_first(mod_amqp_globals.command_hash))) { + while ((hi = switch_core_hash_first_iter(mod_amqp_globals.command_hash, hi))) { switch_core_hash_this(hi, NULL, NULL, (void **)&command); mod_amqp_command_destroy(&command); } switch_log_unbind_logger(mod_amqp_logging_recv); - while ((hi = switch_core_hash_first(mod_amqp_globals.logging_hash))) { + while ((hi = switch_core_hash_first_iter(mod_amqp_globals.logging_hash, hi))) { switch_core_hash_this(hi, NULL, NULL, (void **)&logging); mod_amqp_logging_destroy(&logging); } + switch_core_hash_destroy(&(mod_amqp_globals.producer_hash)); + switch_core_hash_destroy(&(mod_amqp_globals.command_hash)); + switch_core_hash_destroy(&(mod_amqp_globals.logging_hash)); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Mod finished shutting down\n"); return SWITCH_STATUS_SUCCESS; }