From: Praveen Kumar Date: Wed, 22 Nov 2017 17:59:59 +0000 (+0000) Subject: FS-10805: Memory Leak fix in mod_amqp X-Git-Tag: v1.8.1~3^2~261^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=97d6bee3fcac17080775576b140d041d97ccd411;p=thirdparty%2Ffreeswitch.git 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. --- 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; }