]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Leaking on unload is strictly forbidden
authorMathieu Rene <mrene@avgs.ca>
Mon, 23 Feb 2009 19:17:24 +0000 (19:17 +0000)
committerMathieu Rene <mrene@avgs.ca>
Mon, 23 Feb 2009 19:17:24 +0000 (19:17 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12251 d0543943-73ff-0310-b7d9-9358b9ac24b2

13 files changed:
src/mod/applications/mod_easyroute/mod_easyroute.c
src/mod/applications/mod_enum/mod_enum.c
src/mod/dialplans/mod_dialplan_directory/mod_dialplan_directory.c
src/mod/endpoints/mod_alsa/mod_alsa.c
src/mod/endpoints/mod_dingaling/mod_dingaling.c
src/mod/endpoints/mod_iax/mod_iax.c
src/mod/endpoints/mod_reference/mod_reference.c
src/mod/endpoints/mod_skypiax/mod_skypiax.c
src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c
src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c
src/mod/event_handlers/mod_event_socket/mod_event_socket.c
src/mod/loggers/mod_syslog/mod_syslog.c
src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c

index 2ee12666bc22736b6c844c9cc4ecb702aca2550c..2150bb23c82ed618cc6a7bd1f430d8a898813f86 100644 (file)
@@ -426,6 +426,14 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_easyroute_shutdown)
 #ifdef SWITCH_HAVE_ODBC
        switch_odbc_handle_disconnect(globals.master_odbc);
 #endif
+       
+       switch_safe_free(globals.db_username);
+       switch_safe_free(globals.db_password);
+       switch_safe_free(globals.db_dsn);
+       switch_safe_free(globals.default_techprofile);
+       switch_safe_free(globals.default_gateway);
+       switch_safe_free(globals.custom_query);
+
        return SWITCH_STATUS_UNLOAD;
 }
 
index c4ee350ef3231005cd803bed201f987c85b5168f..3c38bebe0a2e6c2f81a7d18873d4432fa509e9b3 100644 (file)
@@ -850,6 +850,9 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_enum_shutdown)
        if (globals.pool) {
                switch_core_destroy_memory_pool(&globals.pool);
        }
+       
+       switch_safe_free(globals.root);
+       switch_safe_free(globals.isn_root);
 
        return SWITCH_STATUS_UNLOAD;
 }
index ed35eadc58a368c132ed1adf3f067578fd9dd0e1..9ffb5d460ce8746a162d5528c28e5a0f8762be58 100644 (file)
@@ -35,7 +35,7 @@
 #include <fcntl.h>
 
 SWITCH_MODULE_LOAD_FUNCTION(mod_dialplan_directory_load);
-SWITCH_MODULE_DEFINITION(mod_dialplan_directory, mod_dialplan_directory_load, NULL, NULL);
+SWITCH_MODULE_DEFINITION(mod_dialplan_directory, mod_dialplan_directory_load, mod_dialplan_directory_shutdown, NULL);
 
 static struct {
        char *directory_name;
@@ -142,11 +142,23 @@ SWITCH_STANDARD_DIALPLAN(directory_dialplan_hunt)
 }
 
 
+SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_enum_shutdown)
+{
+       switch_safe_free(globals.directory_name);
+       switch_safe_free(globals.host);
+       switch_safe_free(globals.dn);
+       switch_safe_free(globals.pass);
+       switch_safe_free(globals.base);
+}
+
+
 SWITCH_MODULE_LOAD_FUNCTION(mod_dialplan_directory_load)
 {
        switch_dialplan_interface_t *dp_interface;
 
+       memset(&globals, 0, sizeof(globals));
        load_config();
+       
        /* connect my internal structure to the blank pointer passed to me */
        *module_interface = switch_loadable_module_create_module_interface(pool, modname);
        SWITCH_ADD_DIALPLAN(dp_interface, "directory", directory_dialplan_hunt);
index 3308cc25b49bd90dbb1b72b8c4e20ca02c940b9f..85060919fd5d8068734f799f4e8daaf8b8164f5a 100644 (file)
@@ -813,7 +813,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_alsa_load)
                return SWITCH_STATUS_TERM;
        }
 
-
+       memset(&globals, 0, sizeof(globals));
 
        if ((status = load_config()) != SWITCH_STATUS_SUCCESS) {
                return status;
@@ -939,6 +939,14 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_alsa_shutdown)
                switch_core_codec_destroy(&globals.write_codec);
        }
        switch_core_hash_destroy(&globals.call_hash);
+       
+       switch_safe_free(globals.dialplan);
+       switch_safe_free(globals.cid_name);
+       switch_safe_free(globals.cid_num);
+       switch_safe_free(globals.ring_file);
+       switch_safe_free(globals.hold_file);
+       switch_safe_free(globals.timer_name);
+       switch_safe_free(globals.device_name);
 
        return SWITCH_STATUS_SUCCESS;
 }
index cf9a4cb4db1f2d5b53851a70aa174af5a0595c49..f8435cf4ab278d39912728be1204b6d51ba3ac8d 100644 (file)
@@ -1748,6 +1748,8 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_dingaling_load)
        switch_api_interface_t *api_interface;
 
        module_pool = pool;
+       
+       memset(&globals, 0, sizeof(globals));
 
        load_config();
 
@@ -1889,6 +1891,11 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_dingaling_shutdown)
 
 
        switch_core_hash_destroy(&globals.profile_hash);
+
+       switch_safe_free(globals.dialplan);
+       switch_safe_free(globals.codec_string);
+       switch_safe_free(globals.codec_rates_string);   
+       
        return SWITCH_STATUS_SUCCESS;
 }
 
index 1cec64993b3a4d0040ae5d17b0c53e118af0da9a..4fb019ad3abcf6ac676adcaf18818aac74a57e45 100644 (file)
@@ -802,6 +802,8 @@ switch_io_routines_t iax_io_routines = {
 
 SWITCH_MODULE_LOAD_FUNCTION(mod_iax_load)
 {
+       memset(&globals, 0, sizeof(globals));
+               
        module_pool = pool;
 
        *module_interface = switch_loadable_module_create_module_interface(pool, modname);
@@ -1148,6 +1150,12 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_iax_shutdown)
                }
                switch_yield(20000);
        }
+       
+       switch_safe_free(globals.dialplan);
+       switch_safe_free(globals.codec_string);
+       switch_safe_free(globals.codec_rates_string);
+       switch_safe_free(globals.ip);
+       
        return SWITCH_STATUS_SUCCESS;
 }
 
index 91cf93b87d056087fbf9b08c7b256db630260bed..60abb501e3d3d8b4a11e9b084af6387d0137ce38 100644 (file)
@@ -532,6 +532,8 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_reference_load)
 
        module_pool = pool;
 
+       memset(&globals, 0, sizeof(globals));
+
        load_config();
 
        *module_interface = switch_loadable_module_create_module_interface(pool, modname);
@@ -565,6 +567,13 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_reference_shutdown)
                }
                switch_yield(20000);
        }
+       
+       /* Free dynamically allocated strings */
+       switch_safe_free(globals.dialplan);
+       switch_safe_free(globals.codec_string);
+       switch_safe_free(globals.codec_rates_string);
+       switch_safe_free(globals.ip);
+       
        return SWITCH_STATUS_SUCCESS;
 }
 
index 7439b98d6c3bfd22dae873570eb65a1e5dfeef61..547116e872e4d1ebe1dfb4deb9f3b0fbf6deb664 100644 (file)
@@ -1071,6 +1071,13 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skypiax_shutdown)
                          globals.SKYPIAX_INTERFACES[interface_id].skypiax_api_thread);
     }
   }
+
+  switch_safe_free(globals.dialplan);
+  switch_safe_free(globals.context);
+  switch_safe_free(globals.destination);
+  switch_safe_free(globals.codec_string);
+  switch_safe_free(globals.codec_rates_string);
+
   return SWITCH_STATUS_SUCCESS;
 }
 
index fb1504dbc6c0bb07ae994825c774ed82ea2d6599..fb8ad359ce0b666e50393960f6727b3d171bac56 100644 (file)
@@ -1296,7 +1296,9 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_erlang_event_load)
 {
        switch_application_interface_t *app_interface;
        switch_api_interface_t *api_interface;
-
+       
+       memset(&prefs, 0, sizeof(prefs));
+       
        switch_mutex_init(&globals.listener_mutex, SWITCH_MUTEX_NESTED, pool);
        
        /* intialize the unique reference stuff */
@@ -1517,6 +1519,10 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_erlang_event_shutdown)
 
        switch_sleep(1500000); /* sleep for 1.5 seconds */
 
+       switch_safe_free(prefs.ip);
+       switch_safe_free(prefs.cookie);
+       switch_safe_free(prefs.nodename);
+
        return SWITCH_STATUS_SUCCESS;
 }
 
index f6b2cefcf4d95854821e400bf224afb0cbdec584..e5d7f4d96c14eff356b63c536ec32da28364b3bd 100644 (file)
@@ -267,6 +267,9 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_event_multicast_shutdown)
 
        switch_core_hash_destroy(&globals.event_hash);
 
+       switch_safe_free(globals.address);
+       switch_safe_free(globals.bindings);
+
        return SWITCH_STATUS_SUCCESS;
 }
 
index 6cf3a868e49305c28d34b995012043eeb9555c01..77f65776c6b940741e10565a3bce7192f789637f 100644 (file)
@@ -471,6 +471,9 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_event_socket_shutdown)
 
        switch_event_unbind(&globals.node);
 
+       switch_safe_free(prefs.ip);
+       switch_safe_free(prefs.password);       
+
        return SWITCH_STATUS_SUCCESS;
 }
 
@@ -933,6 +936,8 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_event_socket_load)
        switch_application_interface_t *app_interface;
        switch_api_interface_t *api_interface;
 
+       memset(&globals, 0, sizeof(globals));
+
        switch_mutex_init(&globals.listener_mutex, SWITCH_MUTEX_NESTED, pool);
 
        memset(&listen_list, 0, sizeof(listen_list));
index a2c0c9ea3200f112fb773397078172a19c229a55..5f21aaf0daaa0d881ce4dff0fba2142d50cfe5d9 100644 (file)
@@ -152,6 +152,8 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_syslog_load)
 {
        switch_status_t status;
        *module_interface = &console_module_interface;
+       
+       memset(&globals, 0, sizeof(globals));
 
        if ((status = load_config()) != SWITCH_STATUS_SUCCESS) {
                return status;
@@ -162,6 +164,9 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_syslog_load)
        setlogmask(LOG_UPTO(LOG_DEBUG));
        switch_log_bind_logger(mod_syslog_logger, log_level, SWITCH_FALSE);
 
+       switch_safe_free(globals.ident);
+       switch_safe_free(globals.format);
+
        return SWITCH_STATUS_SUCCESS;
 }
 
index b2e90ee7026ba9a41ebc65266486bab1e55fea60..f8b2ba8c9d99399f3a8e14912e7454a5145a3c0c 100644 (file)
@@ -851,6 +851,10 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_xml_rpc_shutdown)
                switch_yield(100000);
        } while (globals.running);
 
+       switch_safe_free(globals.realm);
+       switch_safe_free(globals.user);
+       switch_safe_free(globals.pass);
+
        return SWITCH_STATUS_SUCCESS;
 }