提交 8f8402bf authored 作者: Arsen Chaloyan's avatar Arsen Chaloyan

gracefully unload openmrcp module on shutdown

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@5645 d0543943-73ff-0310-b7d9-9358b9ac24b2
上级 a776a8ac
...@@ -855,6 +855,9 @@ static switch_status_t openmrcp_profile_run(openmrcp_profile_t *profile) ...@@ -855,6 +855,9 @@ static switch_status_t openmrcp_profile_run(openmrcp_profile_t *profile)
static switch_status_t openmrcp_init() static switch_status_t openmrcp_init()
{ {
/* one-time mrcp global initialization */
mrcp_global_init();
openmrcp_module.pool = mrcp_global_pool_get(); openmrcp_module.pool = mrcp_global_pool_get();
openmrcp_module.asr_profile = NULL; openmrcp_module.asr_profile = NULL;
openmrcp_module.tts_profile = NULL; openmrcp_module.tts_profile = NULL;
...@@ -877,9 +880,37 @@ static switch_status_t openmrcp_init() ...@@ -877,9 +880,37 @@ static switch_status_t openmrcp_init()
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
SWITCH_MODULE_LOAD_FUNCTION(mod_openmrcp_load) static switch_status_t openmrcp_destroy()
{ {
/* destroy asr/tts profiles */
if(openmrcp_module.asr_profile) {
/* shutdown client engine */
openmrcp_client_shutdown(openmrcp_module.asr_profile->mrcp_client);
/* destroy client context */
mrcp_client_context_destroy(openmrcp_module.asr_profile->mrcp_context);
if(openmrcp_module.tts_profile == openmrcp_module.asr_profile) {
openmrcp_module.tts_profile = NULL;
}
openmrcp_module.asr_profile = NULL;
}
if(openmrcp_module.tts_profile) {
/* shutdown client engine */
openmrcp_client_shutdown(openmrcp_module.tts_profile->mrcp_client);
/* destroy client context */
mrcp_client_context_destroy(openmrcp_module.tts_profile->mrcp_context);
openmrcp_module.tts_profile = NULL;
}
switch_core_hash_destroy(openmrcp_module.profile_hash);
openmrcp_module.profile_hash = NULL;
/* one-time mrcp global destroy */
mrcp_global_destroy();
return SWITCH_STATUS_SUCCESS;
}
SWITCH_MODULE_LOAD_FUNCTION(mod_openmrcp_load)
{
switch_speech_interface_t *speech_interface; switch_speech_interface_t *speech_interface;
switch_asr_interface_t *asr_interface; switch_asr_interface_t *asr_interface;
...@@ -907,8 +938,6 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_openmrcp_load) ...@@ -907,8 +938,6 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_openmrcp_load)
asr_interface->asr_check_results = openmrcp_asr_check_results; asr_interface->asr_check_results = openmrcp_asr_check_results;
asr_interface->asr_get_results = openmrcp_asr_get_results; asr_interface->asr_get_results = openmrcp_asr_get_results;
mrcp_global_init();
/* initialize openmrcp */ /* initialize openmrcp */
if (openmrcp_init() != SWITCH_STATUS_SUCCESS) { if (openmrcp_init() != SWITCH_STATUS_SUCCESS) {
return SWITCH_STATUS_FALSE; return SWITCH_STATUS_FALSE;
...@@ -920,5 +949,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_openmrcp_load) ...@@ -920,5 +949,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_openmrcp_load)
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_openmrcp_shutdown) SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_openmrcp_shutdown)
{ {
return SWITCH_STATUS_SUCCESS; /* destroy openmrcp */
openmrcp_destroy();
return SWITCH_STATUS_UNLOAD;
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论