Fix memory leak
[platform/core/uifw/stt.git] / server / sttd_engine_agent.c
index 81417d5..5e39973 100644 (file)
@@ -1068,9 +1068,20 @@ int sttd_engine_agent_check_app_agreed(const char* appid, bool* result)
        return 0;
 }
 
+static void __recorder_destroy_by_error_result(void *data)
+{
+       SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] Destroy recorder");
+       if (0 != sttd_recorder_destroy())
+               SECURE_SLOG(LOG_WARN, TAG_STTD, "[Engine Agent] Fail to destroy recorder");
+
+       return;
+}
+
 int sttd_engine_agent_send_result(stte_result_event_e event, const char* type, const char** result, int result_count,
                 const char* msg, void* time_info, void *user_data)
 {
+       int ret = -1;
+
        if (false == g_agent_init) {
                SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Result Callback : Not Initialized");
                return STTD_ERROR_OPERATION_FAILED;
@@ -1080,7 +1091,7 @@ int sttd_engine_agent_send_result(stte_result_event_e event, const char* type, c
 
        if (NULL != time_info) {
                /* Get the time info */
-               int ret = stt_engine_foreach_result_time(time_info, __result_time_cb, NULL);
+               ret = stt_engine_foreach_result_time(time_info, __result_time_cb, NULL);
                if (0 != ret) {
                        SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Fail to get time info : %d", ret);
                        return ret;
@@ -1089,17 +1100,15 @@ int sttd_engine_agent_send_result(stte_result_event_e event, const char* type, c
 
        SLOG(LOG_DEBUG, TAG_STTD, "[Server] ============================");
 
-       g_result_cb(event, type, result, result_count, msg, user_data);
+       ret = g_result_cb(event, type, result, result_count, msg, user_data);
 
 #ifdef AUDIO_CREATE_ON_START
        if (event == STTE_RESULT_EVENT_ERROR) {
-               SLOG(LOG_DEBUG, TAG_STTD, "[Engine Agent] Destroy recorder");
-               if (0 != sttd_recorder_destroy())
-                       SECURE_SLOG(LOG_WARN, TAG_STTD, "[Engine Agent] Fail to destroy recorder");
+               ecore_main_loop_thread_safe_call_async(__recorder_destroy_by_error_result, NULL);
        }
 #endif
 
-       return STTD_ERROR_NONE;
+       return ret;
 }
 
 int sttd_engine_agent_send_error(stte_error_e error, const char* msg)
@@ -1107,12 +1116,23 @@ int sttd_engine_agent_send_error(stte_error_e error, const char* msg)
        /* check uid */
        int uid = stt_client_get_current_recognition();
 
-       char* err_msg = strdup(msg);
-       int ret = STTE_ERROR_NONE;
+       char* err_msg = NULL;
+       int ret = STTD_ERROR_NONE;
+
+       if (NULL != msg) {
+               err_msg = strdup(msg);
+       }
 
        ret = sttdc_send_error_signal(uid, error, err_msg);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to send error info.");
+
+               if (NULL != err_msg) {
+                       free(err_msg);
+                       err_msg = NULL;
+               }
+
+               return ret;
        }
 
        if (NULL != err_msg) {
@@ -1120,20 +1140,21 @@ int sttd_engine_agent_send_error(stte_error_e error, const char* msg)
                err_msg = NULL;
        }
 
-       g_error_cb(error, msg);
+       ret = g_error_cb(error, msg);
 
        return ret;
 }
 
 int sttd_engine_agent_send_speech_status(stte_speech_status_e status, void* user_data)
 {
+       int ret = STTD_ERROR_NONE;
        if (false == g_agent_init) {
                SLOG(LOG_ERROR, TAG_STTD, "[Engine Agent ERROR] Silence Callback : Not Initialized");
                return STTD_ERROR_OPERATION_FAILED;
        }
 
-       g_speech_status_cb(status, user_data);
-       return STTD_ERROR_NONE;
+       ret = g_speech_status_cb(status, user_data);
+       return ret;
 }
 
 bool __result_time_cb(int index, stte_result_time_event_e event, const char* text, long start_time, long end_time, void* user_data)