]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-10805: Memory Leak fix in mod_amqp
authorPraveen Kumar <praveen@plivo.com>
Wed, 22 Nov 2017 17:59:59 +0000 (17:59 +0000)
committerPraveen Kumar <praveen@plivo.com>
Thu, 30 Nov 2017 20:21:19 +0000 (01:51 +0530)
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

index e5deaf745aeef0f584d7414827cb848c440bc356..cd8dcf849b4cc9f845a60b88c6f9049e9b3cfc92 100644 (file)
@@ -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;
 }