Fix internal state error when api is called in thread
[platform/core/uifw/stt.git] / client / stt.c
index 149ac44..b082568 100644 (file)
@@ -1592,12 +1592,13 @@ int stt_start(stt_h stt, const char* language, const char* type)
                return STT_ERROR_PERMISSION_DENIED;
        }
 
+       client->internal_state = STT_INTERNAL_STATE_STARTING;
        ret = stt_dbus_request_start(client->uid, temp, type, client->silence, appid, client->credential);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to start : %s", __stt_get_error_code(ret));
+               client->internal_state = STT_INTERNAL_STATE_NONE;
        } else {
                SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Start is successful but not done");
-               client->internal_state = STT_INTERNAL_STATE_STARTING;
        }
 
        if (NULL != temp)       free(temp);
@@ -1640,13 +1641,13 @@ int stt_stop(stt_h stt)
                return STT_ERROR_IN_PROGRESS_TO_PROCESSING;
        }
 
+       client->internal_state = STT_INTERNAL_STATE_STOPPING;
        int ret = stt_dbus_request_stop(client->uid);
-
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to stop : %s", __stt_get_error_code(ret));
+               client->internal_state = STT_INTERNAL_STATE_NONE;
        } else {
                SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Stop is successful but not done");
-               client->internal_state = STT_INTERNAL_STATE_STOPPING;
        }
 
        SLOG(LOG_DEBUG, TAG_STTC, "=====");
@@ -1688,12 +1689,13 @@ int stt_cancel(stt_h stt)
                return STT_ERROR_IN_PROGRESS_TO_READY;
        }
 
+       client->internal_state = STT_INTERNAL_STATE_CANCELING;
        int ret = stt_dbus_request_cancel(client->uid);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_STTC, "[ERROR] Fail to cancel : %s", __stt_get_error_code(ret));
+               client->internal_state = STT_INTERNAL_STATE_NONE;
        } else {
                SLOG(LOG_DEBUG, TAG_STTC, "[SUCCESS] Cancel is successful but not done");
-               client->internal_state = STT_INTERNAL_STATE_CANCELING;
        }
 
        SLOG(LOG_DEBUG, TAG_STTC, "=====");