int __tts_recheck_screen_reader();
static void __start_reprepare_thread(void* data, Ecore_Thread* thread);
static void __end_reprepare_thread(void* data, Ecore_Thread* thread);
+static void __cancel_reprepare_thread(void* data, Ecore_Thread* thread);
static const char* tts_tag()
{
g_pkgmgr_thread = NULL;
}
+static void __cancel_pkgmgr_thread(void* data, Ecore_Thread* thread)
+{
+ SLOG(LOG_ERROR, TAG_TTSC, "[DEBUG] Cancel pkgmgr thread");
+ g_pkgmgr_thread = NULL;
+}
+
static void __pkgmgr_thread(void* data)
{
SLOG(LOG_ERROR, TAG_TTSC, "[DEBUG] call pkgmgr_thread");
if (NULL == g_pkgmgr_thread) {
SLOG(LOG_INFO, TAG_TTSC, "[INFO] ecore thread run: create_pkgmgr_thread");
- g_pkgmgr_thread = ecore_thread_run(__create_pkgmgr_thread, __finish_pkgmgr_thread, NULL, tts);
+ g_pkgmgr_thread = ecore_thread_run(__create_pkgmgr_thread, __finish_pkgmgr_thread, __cancel_pkgmgr_thread, tts);
}
return ;
}
/* Unset registered callbacks */
__tts_unset_all_callbacks(tts);
- /* Check threads */
+ /* Cancel and Check threads */
+ if (NULL != g_pkgmgr_thread && false == ecore_thread_check(g_pkgmgr_thread)) {
+ SLOG(LOG_INFO, TAG_TTSC, "[INFO] Cancel pkgmgr thread");
+ ecore_thread_cancel(g_pkgmgr_thread);
+ }
+ if (NULL != client->thread && false == ecore_thread_check(client->thread)) {
+ SLOG(LOG_INFO, TAG_TTSC, "[INFO] Cancel client thread");
+ ecore_thread_cancel(client->thread);
+ }
+
int thread_count = ecore_thread_active_get();
SLOG(LOG_INFO, TAG_TTSC, "[INFO] Active thread count: %d", thread_count);
int cnt = 0;
SLOG(LOG_ERROR, TAG_TTSC, "[DEBUG] cannot prepare due to engine update");
if (NULL == client->thread) {
SLOG(LOG_INFO, TAG_TTSC, "[INFO] ecore thread run: start_reprepare_thread");
- client->thread = ecore_thread_run(__start_reprepare_thread, __end_reprepare_thread, NULL, tts);
+ client->thread = ecore_thread_run(__start_reprepare_thread, __end_reprepare_thread, __cancel_reprepare_thread, tts);
}
return EINA_FALSE;
}
SLOG(LOG_ERROR, TAG_TTSC, "[DEBUG] cannot prepare due to engine update");
if (NULL == client->thread) {
SLOG(LOG_INFO, TAG_TTSC, "[INFO] ecore thread run: start_reprepare_thread");
- client->thread = ecore_thread_run(__start_reprepare_thread, __end_reprepare_thread, NULL, tts);
+ client->thread = ecore_thread_run(__start_reprepare_thread, __end_reprepare_thread, __cancel_reprepare_thread, tts);
}
client->hello_timer = NULL;
return EINA_FALSE;
client->thread = NULL;
}
+static void __cancel_reprepare_thread(void* data, Ecore_Thread* thread)
+{
+ SLOG(LOG_INFO, TAG_TTSC, "[INFO] cancel reprepare thread");
+
+ tts_h tts = (tts_h)data;
+ tts_client_s* client = tts_client_get(tts);
+ /* check handle */
+ if (NULL == client) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] client is null");
+ return;
+ }
+ client->thread = NULL;
+}
+
int __tts_cb_error(int uid, tts_error_e reason, int utt_id, char* err_msg)
{
if (-1 == uid) {
tts_dbus_remove_match(client->mode);
if (NULL == data->thread) {
SLOG(LOG_INFO, TAG_TTSC, "[INFO] ecore thread run: start_reprepare_thread");
- data->thread = ecore_thread_run(__start_reprepare_thread, __end_reprepare_thread, NULL, data->tts);
+ data->thread = ecore_thread_run(__start_reprepare_thread, __end_reprepare_thread, __cancel_reprepare_thread, data->tts);
}
}
tts_dbus_remove_match(client->mode);
if (NULL == client->thread) {
SLOG(LOG_INFO, TAG_TTSC, "[INFO] ecore thread run: start_reprepare_thread");
- client->thread = ecore_thread_run(__start_reprepare_thread, __end_reprepare_thread, NULL, client->tts);
+ client->thread = ecore_thread_run(__start_reprepare_thread, __end_reprepare_thread, __cancel_reprepare_thread, client->tts);
}
}
}