Add mutex on tts_config_info for thread safety 08/267408/1
authorwn.jang <wn.jang@samsung.com>
Fri, 3 Dec 2021 01:25:02 +0000 (10:25 +0900)
committerwn.jang <wn.jang@samsung.com>
Fri, 3 Dec 2021 01:25:02 +0000 (10:25 +0900)
Change-Id: Ia4b9a35c2c15aeb6a419892a9bde072f9455afad

common/tts_config_parser.c

index 87604cd61e818e4f6edd9bb77c19b828bd0a574a..ea396e91700a2ac6b64e698e103e8f8e6e8fb1f3 100644 (file)
@@ -53,6 +53,8 @@ char g_language[128] = {0,};
 
 static tts_config_s* g_config_info = NULL;
 
+static pthread_mutex_t g_config_info_mutex = PTHREAD_MUTEX_INITIALIZER;
+
 int tts_parser_get_engine_info(const char* path, tts_engine_info_s** engine_info)
 {
        if (NULL == path || NULL == engine_info) {
@@ -574,14 +576,15 @@ int tts_parser_unload_config(void)
                xmlFreeDoc(g_config_doc);
                g_config_doc = NULL;
        }
+       pthread_mutex_lock(&g_config_info_mutex);
        if (NULL != g_config_info) {
                SLOG(LOG_ERROR, TAG_TTSCONFIG, "[DEBUG] Free config_info(%p)", g_config_info);
                free(g_config_info);
                g_config_info = NULL;
        }
+       pthread_mutex_unlock(&g_config_info_mutex);
 
        xmlCleanupParser();
-
        return 0;
 }
 
@@ -592,11 +595,13 @@ int tts_parser_set_config_info(tts_config_s* config_info)
                SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] config_info is NULL");
                return -1;
        }
+       pthread_mutex_lock(&g_config_info_mutex);
        if (NULL == g_config_info) {
                SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] g_config_info is NULL");
                return -1;
        }
        memcpy(g_config_info, config_info, sizeof(tts_config_s));
+       pthread_mutex_unlock(&g_config_info_mutex);
        return 0;
 }
 
@@ -607,11 +612,13 @@ int tts_parser_get_config_info(tts_config_s* config_info)
                SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] config_info is NULL");
                return -1;
        }
+       pthread_mutex_lock(&g_config_info_mutex);
        if (NULL == g_config_info) {
                SLOG(LOG_ERROR, TAG_TTSCONFIG, "[ERROR] g_config_info is NULL");
                return -1;
        }
        memcpy(config_info, g_config_info, sizeof(tts_config_s));
+       pthread_mutex_unlock(&g_config_info_mutex);
        return 0;
 }