#define VC_MANAGER_CONFIG_HANDLE 100000
static Ecore_Timer* g_m_connect_timer = NULL;
+static Ecore_Idler* g_m_connect_idler = NULL;
+static int g_retry_connect_count = 0;
static Ecore_Timer* g_m_set_volume_timer = NULL;
static vc_audio_type_e g_feedback_audio_type = 0;
static Ecore_Thread* g_feedback_thread = NULL;
-static Ecore_Thread* g_mgr_thread = NULL;
static Eina_Bool __vc_mgr_notify_state_changed(void *data);
static void __vc_mgr_notify_error(void *data);
ecore_timer_del(g_m_connect_timer);
g_m_connect_timer = NULL;
}
+ if (g_m_connect_idler) {
+ SLOG(LOG_DEBUG, TAG_VCM, "Connect idler is deleted");
+ ecore_idler_del(g_m_connect_idler);
+ g_m_connect_idler = NULL;
+ }
vc_config_mgr_unset_lang_cb(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE);
vc_config_mgr_finalize(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE);
int service_state = 0;
int foreground = VC_RUNTIME_INFO_NO_FOREGROUND;
- g_m_connect_timer = NULL;
/* check handle */
if (true == vc_mgr_client_is_valid(g_vc_m)) {
ecore_main_loop_thread_safe_call_async(__vc_mgr_notify_error, (void*)g_vc_m);
SLOG(LOG_DEBUG, TAG_VCM, "@@@");
+ g_m_connect_idler = NULL;
return EINA_FALSE;
} else if (0 != ret) {
}
} else {
SLOG(LOG_ERROR, TAG_VCM, "[Not ERROR] g_vc_m is not valid. It is destroyed."); //LCOV_EXCL_LINE
+ g_m_connect_idler = NULL;
return EINA_FALSE;
}
SLOG(LOG_ERROR, TAG_VCM, "@@@");
+ g_m_connect_idler = NULL;
return EINA_FALSE;
}
-static void __start_prepare_thread(void *data, Ecore_Thread *thread)
+static Eina_Bool __vc_mgr_prepare_daemon(void *data)
{
- SLOG(LOG_ERROR, TAG_VCM, "@@@ Start prepare thread");
- int ret = 1, retry_count = 0;
-
/* Send hello */
- while (0 != ret) {
-
- if (retry_count == 10) {
+ if (0 != vc_mgr_dbus_request_hello()) {
+ if (g_retry_connect_count == 20) {
+ g_retry_connect_count = 0;
SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request hello !! send error to manager");
__vc_mgr_cb_error(VC_ERROR_TIMED_OUT, -1, "voice_framework.error.vcfw.connect_engine_fail");
- return;
- }
-
- ret = vc_mgr_dbus_request_hello();
- if (ret == 0) {
- SLOG(LOG_INFO, TAG_VCM, "Success to request hello. retry count(%d)", retry_count);
- break;
+ g_m_connect_timer = NULL;
+ return EINA_FALSE;
} else {
- retry_count++;
+ g_retry_connect_count++;
+ return EINA_TRUE;
}
}
- ret = 1;
- retry_count = 0;
- while (0 != ret) {
- if (retry_count == 10) {
- SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to connect daemon !!");
- return;
- }
- ret = __vc_mgr_connect_daemon(NULL);
- if (ret == 0)
- break;
- else
- retry_count++;
- }
+ SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Connect daemon");
- return;
-}
+ if (NULL == g_m_connect_idler) {
+ SLOG(LOG_DEBUG, TAG_VCM, "[DEBUG] Create a new idler for preparation");
+ g_m_connect_idler = ecore_idler_add(__vc_mgr_connect_daemon, NULL);
+ } else {
+ SLOG(LOG_DEBUG, TAG_VCM, "[INFO] idler handle is already created");
+ }
-static void __end_prepare_thread(void *data, Ecore_Thread *thread)
-{
- SLOG(LOG_INFO, TAG_VCM, "@@@ End prepare thread");
- g_mgr_thread = NULL;
+ g_m_connect_timer = NULL;
+ return EINA_FALSE;
}
int vc_mgr_prepare(void)
return VC_ERROR_INVALID_STATE;
}
- bool is_exist = ecore_thread_check(g_mgr_thread);
- if (NULL == g_mgr_thread || TRUE == is_exist) {
- SLOG(LOG_DEBUG, TAG_VCM, "[DEBUG] Create a new thread for preparation");
+ if (NULL == g_m_connect_timer) {
+ g_retry_connect_count = 0;
+ SLOG(LOG_DEBUG, TAG_VCM, "[DEBUG] Create a new timer for preparation");
ecore_thread_main_loop_begin();
- g_mgr_thread = ecore_thread_run(__start_prepare_thread, __end_prepare_thread, NULL, NULL);
+ g_m_connect_timer = ecore_timer_add(0.02, __vc_mgr_prepare_daemon, NULL);
ecore_thread_main_loop_end();
+ } else {
+ SLOG(LOG_DEBUG, TAG_VCM, "[INFO] timer handle is already created");
}
SLOG(LOG_DEBUG, TAG_VCM, "@@@");