diff --git a/src/mod/applications/mod_easyroute/mod_easyroute.c b/src/mod/applications/mod_easyroute/mod_easyroute.c index 2ee12666bc..2150bb23c8 100644 --- a/src/mod/applications/mod_easyroute/mod_easyroute.c +++ b/src/mod/applications/mod_easyroute/mod_easyroute.c @@ -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; } diff --git a/src/mod/applications/mod_enum/mod_enum.c b/src/mod/applications/mod_enum/mod_enum.c index c4ee350ef3..3c38bebe0a 100644 --- a/src/mod/applications/mod_enum/mod_enum.c +++ b/src/mod/applications/mod_enum/mod_enum.c @@ -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; } diff --git a/src/mod/dialplans/mod_dialplan_directory/mod_dialplan_directory.c b/src/mod/dialplans/mod_dialplan_directory/mod_dialplan_directory.c index ed35eadc58..9ffb5d460c 100644 --- a/src/mod/dialplans/mod_dialplan_directory/mod_dialplan_directory.c +++ b/src/mod/dialplans/mod_dialplan_directory/mod_dialplan_directory.c @@ -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); diff --git a/src/mod/endpoints/mod_alsa/mod_alsa.c b/src/mod/endpoints/mod_alsa/mod_alsa.c index 3308cc25b4..85060919fd 100644 --- a/src/mod/endpoints/mod_alsa/mod_alsa.c +++ b/src/mod/endpoints/mod_alsa/mod_alsa.c @@ -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; } diff --git a/src/mod/endpoints/mod_dingaling/mod_dingaling.c b/src/mod/endpoints/mod_dingaling/mod_dingaling.c index cf9a4cb4db..f8435cf4ab 100644 --- a/src/mod/endpoints/mod_dingaling/mod_dingaling.c +++ b/src/mod/endpoints/mod_dingaling/mod_dingaling.c @@ -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; } diff --git a/src/mod/endpoints/mod_iax/mod_iax.c b/src/mod/endpoints/mod_iax/mod_iax.c index 1cec64993b..4fb019ad3a 100644 --- a/src/mod/endpoints/mod_iax/mod_iax.c +++ b/src/mod/endpoints/mod_iax/mod_iax.c @@ -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; } diff --git a/src/mod/endpoints/mod_reference/mod_reference.c b/src/mod/endpoints/mod_reference/mod_reference.c index 91cf93b87d..60abb501e3 100644 --- a/src/mod/endpoints/mod_reference/mod_reference.c +++ b/src/mod/endpoints/mod_reference/mod_reference.c @@ -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; } diff --git a/src/mod/endpoints/mod_skypiax/mod_skypiax.c b/src/mod/endpoints/mod_skypiax/mod_skypiax.c index 7439b98d6c..547116e872 100644 --- a/src/mod/endpoints/mod_skypiax/mod_skypiax.c +++ b/src/mod/endpoints/mod_skypiax/mod_skypiax.c @@ -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; } diff --git a/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c b/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c index fb1504dbc6..fb8ad359ce 100644 --- a/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c +++ b/src/mod/event_handlers/mod_erlang_event/mod_erlang_event.c @@ -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; } diff --git a/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c b/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c index f6b2cefcf4..e5d7f4d96c 100644 --- a/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c +++ b/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c @@ -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; } diff --git a/src/mod/event_handlers/mod_event_socket/mod_event_socket.c b/src/mod/event_handlers/mod_event_socket/mod_event_socket.c index 6cf3a868e4..77f65776c6 100644 --- a/src/mod/event_handlers/mod_event_socket/mod_event_socket.c +++ b/src/mod/event_handlers/mod_event_socket/mod_event_socket.c @@ -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)); diff --git a/src/mod/loggers/mod_syslog/mod_syslog.c b/src/mod/loggers/mod_syslog/mod_syslog.c index a2c0c9ea32..5f21aaf0da 100644 --- a/src/mod/loggers/mod_syslog/mod_syslog.c +++ b/src/mod/loggers/mod_syslog/mod_syslog.c @@ -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; } diff --git a/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c b/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c index b2e90ee702..f8b2ba8c9d 100644 --- a/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c +++ b/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c @@ -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; }