From: Suyeon Hwang Date: Wed, 16 Feb 2022 02:30:02 +0000 (+0900) Subject: Fix potential defects on ttsd_player X-Git-Tag: accepted/tizen/unified/20220221.080259~1^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9894f92b8e0944bc7b58637127e99f7ee822725b;p=platform%2Fcore%2Fuifw%2Ftts.git Fix potential defects on ttsd_player 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 --- diff --git a/server/ttsd_player.cpp b/server/ttsd_player.cpp index 6724965..80b3a80 100644 --- a/server/ttsd_player.cpp +++ b/server/ttsd_player.cpp @@ -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; }