mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-15 16:39:14 +00:00
FS-7951 #resolve #comment completely clean up mod_rayo if it fails to load
This commit is contained in:
parent
2f61fe0193
commit
dff03e35cf
@ -885,9 +885,15 @@ static void start_deliver_message_thread(switch_memory_pool_t *pool)
|
|||||||
static void stop_all_threads(void)
|
static void stop_all_threads(void)
|
||||||
{
|
{
|
||||||
globals.shutdown = 1;
|
globals.shutdown = 1;
|
||||||
switch_queue_interrupt_all(globals.msg_queue);
|
if (globals.msg_queue) {
|
||||||
switch_queue_interrupt_all(globals.offer_queue);
|
switch_queue_interrupt_all(globals.msg_queue);
|
||||||
switch_thread_rwlock_wrlock(globals.shutdown_rwlock);
|
}
|
||||||
|
if (globals.offer_queue) {
|
||||||
|
switch_queue_interrupt_all(globals.offer_queue);
|
||||||
|
}
|
||||||
|
if (globals.shutdown_rwlock) {
|
||||||
|
switch_thread_rwlock_wrlock(globals.shutdown_rwlock);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -5054,6 +5060,79 @@ static switch_status_t list_input(const char *line, const char *cursor, switch_c
|
|||||||
return list_actors(line, cursor, matches, is_input_actor);
|
return list_actors(line, cursor, matches, is_input_actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shutdown module on load failure or shutdown from FreeSWITCH core
|
||||||
|
*/
|
||||||
|
static switch_status_t do_shutdown(void)
|
||||||
|
{
|
||||||
|
switch_console_del_complete_func("::rayo::list_all");
|
||||||
|
switch_console_del_complete_func("::rayo::list_internal");
|
||||||
|
switch_console_del_complete_func("::rayo::list_external");
|
||||||
|
switch_console_del_complete_func("::rayo::list_server");
|
||||||
|
switch_console_del_complete_func("::rayo::list_call");
|
||||||
|
switch_console_del_complete_func("::rayo::list_component");
|
||||||
|
switch_console_del_complete_func("::rayo::list_record");
|
||||||
|
switch_console_del_complete_func("::rayo::list_output");
|
||||||
|
switch_console_del_complete_func("::rayo::list_input");
|
||||||
|
switch_console_set_complete("del rayo");
|
||||||
|
|
||||||
|
/* stop XMPP streams */
|
||||||
|
if (globals.xmpp_context) {
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Waiting for XMPP threads to stop\n");
|
||||||
|
xmpp_stream_context_destroy(globals.xmpp_context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* stop threads */
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Waiting for message and offer timeout threads to stop\n");
|
||||||
|
stop_all_threads();
|
||||||
|
|
||||||
|
if (globals.console) {
|
||||||
|
RAYO_RELEASE(globals.console);
|
||||||
|
RAYO_DESTROY(globals.console);
|
||||||
|
globals.console = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (globals.server) {
|
||||||
|
RAYO_RELEASE(globals.server);
|
||||||
|
RAYO_DESTROY(globals.server);
|
||||||
|
globals.server = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
rayo_components_shutdown();
|
||||||
|
|
||||||
|
switch_event_unbind_callback(route_call_event);
|
||||||
|
switch_event_unbind_callback(on_call_end_event);
|
||||||
|
switch_event_unbind_callback(route_mixer_event);
|
||||||
|
|
||||||
|
if (globals.command_handlers) {
|
||||||
|
switch_core_hash_destroy(&globals.command_handlers);
|
||||||
|
}
|
||||||
|
if (globals.event_handlers) {
|
||||||
|
switch_core_hash_destroy(&globals.event_handlers);
|
||||||
|
}
|
||||||
|
if (globals.clients_roster) {
|
||||||
|
switch_core_hash_destroy(&globals.clients_roster);
|
||||||
|
}
|
||||||
|
if (globals.actors) {
|
||||||
|
switch_core_hash_destroy(&globals.actors);
|
||||||
|
}
|
||||||
|
if (globals.destroy_actors) {
|
||||||
|
switch_core_hash_destroy(&globals.destroy_actors);
|
||||||
|
}
|
||||||
|
if (globals.actors_by_id) {
|
||||||
|
switch_core_hash_destroy(&globals.actors_by_id);
|
||||||
|
}
|
||||||
|
if (globals.dial_gateways) {
|
||||||
|
switch_core_hash_destroy(&globals.dial_gateways);
|
||||||
|
}
|
||||||
|
if (globals.cmd_aliases) {
|
||||||
|
switch_core_hash_destroy(&globals.cmd_aliases);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return SWITCH_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load module
|
* Load module
|
||||||
*/
|
*/
|
||||||
@ -5116,12 +5195,19 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_rayo_load)
|
|||||||
|
|
||||||
/* set up rayo components */
|
/* set up rayo components */
|
||||||
if (rayo_components_load(module_interface, pool, RAYO_CONFIG_FILE) != SWITCH_STATUS_SUCCESS) {
|
if (rayo_components_load(module_interface, pool, RAYO_CONFIG_FILE) != SWITCH_STATUS_SUCCESS) {
|
||||||
return SWITCH_STATUS_TERM;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* configure / open sockets */
|
/* configure / open sockets */
|
||||||
if(do_config(globals.pool, RAYO_CONFIG_FILE) != SWITCH_STATUS_SUCCESS) {
|
if(do_config(globals.pool, RAYO_CONFIG_FILE) != SWITCH_STATUS_SUCCESS) {
|
||||||
return SWITCH_STATUS_TERM;
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* create admin client */
|
||||||
|
globals.console = rayo_console_client_create();
|
||||||
|
if (!globals.console) {
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Failed to create console client entity!\n");
|
||||||
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* start up message threads */
|
/* start up message threads */
|
||||||
@ -5133,13 +5219,6 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_rayo_load)
|
|||||||
}
|
}
|
||||||
start_offer_timeout_thread(pool);
|
start_offer_timeout_thread(pool);
|
||||||
|
|
||||||
/* create admin client */
|
|
||||||
globals.console = rayo_console_client_create();
|
|
||||||
if (!globals.console) {
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Failed to create console client entity!\n");
|
|
||||||
return SWITCH_STATUS_TERM;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch_console_set_complete("add rayo status");
|
switch_console_set_complete("add rayo status");
|
||||||
switch_console_set_complete("add rayo msg ::rayo::list_all");
|
switch_console_set_complete("add rayo msg ::rayo::list_all");
|
||||||
switch_console_set_complete("add rayo msg ::rayo::list_all chat");
|
switch_console_set_complete("add rayo msg ::rayo::list_all chat");
|
||||||
@ -5159,6 +5238,11 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_rayo_load)
|
|||||||
switch_console_add_complete_func("::rayo::list_input", list_input);
|
switch_console_add_complete_func("::rayo::list_input", list_input);
|
||||||
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
return SWITCH_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
error:
|
||||||
|
do_shutdown();
|
||||||
|
return SWITCH_STATUS_TERM;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -5166,56 +5250,9 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_rayo_load)
|
|||||||
*/
|
*/
|
||||||
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_rayo_shutdown)
|
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_rayo_shutdown)
|
||||||
{
|
{
|
||||||
switch_console_del_complete_func("::rayo::list_all");
|
switch_status_t result = do_shutdown();
|
||||||
switch_console_del_complete_func("::rayo::list_internal");
|
|
||||||
switch_console_del_complete_func("::rayo::list_external");
|
|
||||||
switch_console_del_complete_func("::rayo::list_server");
|
|
||||||
switch_console_del_complete_func("::rayo::list_call");
|
|
||||||
switch_console_del_complete_func("::rayo::list_component");
|
|
||||||
switch_console_del_complete_func("::rayo::list_record");
|
|
||||||
switch_console_del_complete_func("::rayo::list_output");
|
|
||||||
switch_console_del_complete_func("::rayo::list_input");
|
|
||||||
switch_console_set_complete("del rayo");
|
|
||||||
|
|
||||||
/* stop XMPP streams */
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Waiting for XMPP threads to stop\n");
|
|
||||||
xmpp_stream_context_destroy(globals.xmpp_context);
|
|
||||||
|
|
||||||
/* stop threads */
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Waiting for message and offer timeout threads to stop\n");
|
|
||||||
stop_all_threads();
|
|
||||||
|
|
||||||
if (globals.console) {
|
|
||||||
RAYO_RELEASE(globals.console);
|
|
||||||
RAYO_DESTROY(globals.console);
|
|
||||||
globals.console = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (globals.server) {
|
|
||||||
RAYO_RELEASE(globals.server);
|
|
||||||
RAYO_DESTROY(globals.server);
|
|
||||||
globals.server = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
rayo_components_shutdown();
|
|
||||||
|
|
||||||
/* cleanup module */
|
|
||||||
switch_event_unbind_callback(route_call_event);
|
|
||||||
switch_event_unbind_callback(on_call_end_event);
|
|
||||||
switch_event_unbind_callback(route_mixer_event);
|
|
||||||
|
|
||||||
switch_core_hash_destroy(&globals.command_handlers);
|
|
||||||
switch_core_hash_destroy(&globals.event_handlers);
|
|
||||||
switch_core_hash_destroy(&globals.clients_roster);
|
|
||||||
switch_core_hash_destroy(&globals.actors);
|
|
||||||
switch_core_hash_destroy(&globals.destroy_actors);
|
|
||||||
switch_core_hash_destroy(&globals.actors_by_id);
|
|
||||||
switch_core_hash_destroy(&globals.dial_gateways);
|
|
||||||
switch_core_hash_destroy(&globals.cmd_aliases);
|
|
||||||
|
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Module shutdown\n");
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Module shutdown\n");
|
||||||
|
return result;
|
||||||
return SWITCH_STATUS_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -390,7 +390,9 @@ void rayo_cpa_component_shutdown(void)
|
|||||||
switch_event_unbind_callback(on_rayo_cpa_detector_event);
|
switch_event_unbind_callback(on_rayo_cpa_detector_event);
|
||||||
switch_event_unbind_callback(on_channel_hangup_complete_event);
|
switch_event_unbind_callback(on_channel_hangup_complete_event);
|
||||||
rayo_cpa_detector_shutdown();
|
rayo_cpa_detector_shutdown();
|
||||||
switch_core_hash_destroy(&globals.subscribers);
|
if (globals.subscribers) {
|
||||||
|
switch_core_hash_destroy(&globals.subscribers);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For Emacs:
|
/* For Emacs:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* mod_rayo for FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
|
* mod_rayo for FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
|
||||||
* Copyright (C) 2014, Grasshopper
|
* Copyright (C) 2014-2015, Grasshopper
|
||||||
*
|
*
|
||||||
* Version: MPL 1.1
|
* Version: MPL 1.1
|
||||||
*
|
*
|
||||||
@ -452,7 +452,9 @@ void rayo_cpa_detector_shutdown(void)
|
|||||||
{
|
{
|
||||||
switch_console_set_complete("del rayo_cpa");
|
switch_console_set_complete("del rayo_cpa");
|
||||||
switch_console_del_complete_func("::rayo_cpa::list_signal_types");
|
switch_console_del_complete_func("::rayo_cpa::list_signal_types");
|
||||||
switch_core_hash_destroy(&globals.detectors);
|
if (globals.detectors) {
|
||||||
|
switch_core_hash_destroy(&globals.detectors);
|
||||||
|
}
|
||||||
switch_event_unbind_callback(rayo_cpa_detector_event);
|
switch_event_unbind_callback(rayo_cpa_detector_event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1066,7 +1066,9 @@ switch_status_t rayo_input_component_shutdown(void)
|
|||||||
{
|
{
|
||||||
switch_event_unbind_callback(on_detected_speech_event);
|
switch_event_unbind_callback(on_detected_speech_event);
|
||||||
|
|
||||||
srgs_parser_destroy(globals.parser);
|
if (globals.parser) {
|
||||||
|
srgs_parser_destroy(globals.parser);
|
||||||
|
}
|
||||||
srgs_destroy();
|
srgs_destroy();
|
||||||
nlsml_destroy();
|
nlsml_destroy();
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* mod_rayo for FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
|
* mod_rayo for FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
|
||||||
* Copyright (C) 2013-2014, Grasshopper
|
* Copyright (C) 2013-2015, Grasshopper
|
||||||
*
|
*
|
||||||
* Version: MPL 1.1
|
* Version: MPL 1.1
|
||||||
*
|
*
|
||||||
@ -1259,7 +1259,9 @@ switch_status_t rayo_output_component_load(switch_loadable_module_interface_t **
|
|||||||
*/
|
*/
|
||||||
switch_status_t rayo_output_component_shutdown(void)
|
switch_status_t rayo_output_component_shutdown(void)
|
||||||
{
|
{
|
||||||
switch_core_hash_destroy(&fileman_globals.hash);
|
if (fileman_globals.hash) {
|
||||||
|
switch_core_hash_destroy(&fileman_globals.hash);
|
||||||
|
}
|
||||||
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
return SWITCH_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user