Fix potential defects on ttsd_player 45/271145/1
authorSuyeon Hwang <stom.hwang@samsung.com>
Wed, 16 Feb 2022 02:30:02 +0000 (11:30 +0900)
committerSuyeon Hwang <stom.hwang@samsung.com>
Wed, 16 Feb 2022 02:30:04 +0000 (11:30 +0900)
This patch includes this changes in order to fix some potential defects:
- Remove null pointer dereferencing
- Add mutex lock in order to use conditional wait
- Move assigning code to avoid change out of critical section

Change-Id: Iad704cfd30316b5299ab5acbb47178fb6ef2c12a
Signed-off-by: Suyeon Hwang <stom.hwang@samsung.com>
server/ttsd_player.cpp

index 6724965..80b3a80 100644 (file)
@@ -631,7 +631,7 @@ static void __play_thread_old(void *data, Ecore_Thread *thread)
                        ttsd_data_destroy_sound_data(sound_data);
                        sound_data = ttsd_data_create_sound_data(paused_data->utt_id, paused_data->data, paused_data->data_size,
                                        paused_data->event, paused_data->audio_type, paused_data->rate, paused_data->channels);
-                       if (NULL == sound_data || player->paused_data->data_size <= 0) {
+                       if (NULL == sound_data || paused_data->data_size <= 0) {
                                SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Out of memory OR paused_data is empty");
                                ttsd_data_destroy_sound_data(sound_data);
                                sound_data = paused_data;
@@ -980,6 +980,7 @@ static void __play_thread(void *data, Ecore_Thread *thread)
 
        while (g_player_init) {
                SLOG(LOG_INFO, tts_tag(), "[Player] Wait play request...");
+               pthread_mutex_lock(&g_play_thread_mutex);
                pthread_cond_wait(&g_play_thread_cond, &g_play_thread_mutex);
                if (false == g_player_init) {
                        SLOG(LOG_INFO, tts_tag(), "[Player] Player is released");
@@ -1511,10 +1512,11 @@ int ttsd_player_all_stop()
                        app_tts_state_e state;
                        if (0 > ttsd_data_get_client_state(data->uid, &state)) {
                                SLOG(LOG_ERROR, tts_tag(), "[player ERROR] uid(%u) is not valid", data->uid);
+                               iter = g_list_next(iter);
+
                                pthread_mutex_unlock(&g_player_control_mutex);
                                ttsd_player_destroy_instance(data->uid);
                                pthread_mutex_lock(&g_player_control_mutex);
-                               iter = g_list_next(iter);
                                continue;
                        }