From 9238d18e9839520e511818a977aa59d593e7590c Mon Sep 17 00:00:00 2001 From: sungrae jo Date: Fri, 23 Feb 2018 16:25:29 +0900 Subject: [PATCH] Fixed terminate issue for voice control engine Change-Id: Ic751d9201a970c8ad9df2de5b2916c39f693b2c4 Signed-off-by: sungrae jo --- server/vcd_engine_agent.c | 5 ++++- server/vcd_recorder.c | 4 +++- server/vcd_server.c | 23 +++++++++++++++-------- server/vcd_server.h | 2 +- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/server/vcd_engine_agent.c b/server/vcd_engine_agent.c index 1f4c585..4b562b3 100644 --- a/server/vcd_engine_agent.c +++ b/server/vcd_engine_agent.c @@ -120,7 +120,10 @@ int vcd_engine_agent_release() } /* unload current engine */ - vcd_engine_agent_unload_current_engine(); + if (0 != vcd_engine_agent_unload_current_engine()) { + SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to deinitialize"); + return VCD_ERROR_OPERATION_FAILED; + } /* release current engine data */ if (NULL != g_dynamic_engine.callbacks) { diff --git a/server/vcd_recorder.c b/server/vcd_recorder.c index f3194d4..eea8f50 100644 --- a/server/vcd_recorder.c +++ b/server/vcd_recorder.c @@ -483,7 +483,9 @@ int vcd_recorder_destroy() if (0 != ret) SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to destroy stream info, ret(%d)", ret); - audio_in_destroy(g_audio_h); + ret = audio_in_destroy(g_audio_h); + if (0 != ret) + SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to audio in destroy, ret(%d)", ret); #ifdef TV_BT_MODE bt_hid_unset_audio_data_receive_cb(); diff --git a/server/vcd_server.c b/server/vcd_server.c index 58d6d7d..688e21d 100755 --- a/server/vcd_server.c +++ b/server/vcd_server.c @@ -1033,7 +1033,7 @@ int vcd_initialize(vce_request_callback_s *callback) return 0; } -void vcd_finalize() +bool vcd_finalize() { GList *iter = NULL; if (0 < g_list_length(g_proc_list)) { @@ -1056,14 +1056,17 @@ void vcd_finalize() } vcd_engine_recognize_cancel(); } + if (0 != vcd_recorder_destroy()) { SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to destroy recorder"); + return false; } else { SLOG(LOG_DEBUG, TAG_VCD, "[Server] destroy recorder"); } if (0 != vcd_engine_agent_release()) { SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to release engine"); + return false; } else { SLOG(LOG_DEBUG, TAG_VCD, "[Server] release engine"); } @@ -1075,14 +1078,18 @@ void vcd_finalize() SLOG(LOG_ERROR, TAG_VCD, "[Server] mode finalize"); - return; + return true; } static Eina_Bool __finalize_quit_ecore_loop(void *data) { - SLOG(LOG_ERROR, TAG_VCD, "[Server] quit ecore main loop"); - ecore_main_loop_quit(); - return EINA_FALSE; + bool ret = vcd_finalize(); + if (false == ret) { + return EINA_TRUE; + } else { + ecore_main_loop_quit(); + return EINA_FALSE; + } } static void __read_proc() @@ -1355,7 +1362,7 @@ int vcd_server_mgr_finalize(int pid) if (0 == vcd_client_get_ref_count()) { SLOG(LOG_DEBUG, TAG_VCD, "[Server] Connected client list is empty"); - ecore_timer_add(0, __finalize_quit_ecore_loop, NULL); + ecore_timer_add(0.5, __finalize_quit_ecore_loop, NULL); } SLOG(LOG_ERROR, TAG_VCD, "[Server Success] Manager Finalize : pid(%d)", pid); @@ -1956,7 +1963,7 @@ int vcd_server_finalize(int pid) if (0 == vcd_client_get_ref_count()) { SLOG(LOG_DEBUG, TAG_VCD, "[Server] Connected client list is empty"); - ecore_timer_add(0, __finalize_quit_ecore_loop, NULL); + ecore_timer_add(0.5, __finalize_quit_ecore_loop, NULL); } SLOG(LOG_DEBUG, TAG_VCD, "[Server Success] Client Finalize : pid(%d)", pid); @@ -2270,7 +2277,7 @@ int vcd_server_widget_finalize(int pid) if (0 == vcd_client_get_ref_count()) { SLOG(LOG_ERROR, TAG_VCD, "[Server] connected client list is empty"); - ecore_timer_add(0, __finalize_quit_ecore_loop, NULL); + ecore_timer_add(0.5, __finalize_quit_ecore_loop, NULL); return 0; } diff --git a/server/vcd_server.h b/server/vcd_server.h index b328a7e..6df0154 100644 --- a/server/vcd_server.h +++ b/server/vcd_server.h @@ -32,7 +32,7 @@ extern "C" { */ int vcd_initialize(vce_request_callback_s *callback); -void vcd_finalize(); +bool vcd_finalize(); Eina_Bool vcd_cleanup_client_all(void *data); -- 2.7.4