From: Suyeon Hwang Date: Fri, 6 Aug 2021 08:42:53 +0000 (+0900) Subject: Make mutex cover all access of g_tidl_proxy_infos X-Git-Tag: accepted/tizen/unified/20210810.135334~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F10%2F262310%2F1;p=platform%2Fcore%2Fuifw%2Ftts.git Make mutex cover all access of g_tidl_proxy_infos Change-Id: I917d28f6c529cf2f20ef31c05967ab525479d893 Signed-off-by: Suyeon Hwang --- diff --git a/server/ttsd_tidl.c b/server/ttsd_tidl.c index 06d5012..744b25f 100644 --- a/server/ttsd_tidl.c +++ b/server/ttsd_tidl.c @@ -163,14 +163,17 @@ static void __register_cb(rpc_port_stub_tts_context_h context, int pid, int uid, intptr_t ptr_uid = uid; rpc_port_stub_tts_context_set_tag(context, (void*)ptr_uid); + pthread_mutex_lock(&g_tidl_proxy_infos_mutex); tts_tidl_proxy_info_s* info = __get_tidl_proxy_info_s(uid); if (NULL == info) { info = (tts_tidl_proxy_info_s*)calloc(1, sizeof(tts_tidl_proxy_info_s)); if (NULL == info) { SLOG(LOG_ERROR, tts_tag(), "[TIDL ERROR] Fail to allocate memory for tidl proxy"); + pthread_mutex_unlock(&g_tidl_proxy_infos_mutex); return; } } else { + g_tidl_proxy_infos = g_list_remove(g_tidl_proxy_infos, info); rpc_port_tts_notify_cb_destroy(info->notify_cb_h); info->notify_cb_h = NULL; } @@ -178,11 +181,11 @@ static void __register_cb(rpc_port_stub_tts_context_h context, int pid, int uid, if (0 != rpc_port_tts_notify_cb_clone(callback, &info->notify_cb_h)) { SLOG(LOG_ERROR, tts_tag(), "[TIDL ERROR] Fail to set notify callback"); free(info); + pthread_mutex_unlock(&g_tidl_proxy_infos_mutex); return; } info->uid = uid; - pthread_mutex_lock(&g_tidl_proxy_infos_mutex); g_tidl_proxy_infos = g_list_append(g_tidl_proxy_infos, info); pthread_mutex_unlock(&g_tidl_proxy_infos_mutex); @@ -201,14 +204,17 @@ static int __register_cb_sync(rpc_port_stub_tts_context_h context, int pid, int intptr_t ptr_uid = uid; rpc_port_stub_tts_context_set_tag(context, (void*)ptr_uid); + pthread_mutex_lock(&g_tidl_proxy_infos_mutex); tts_tidl_proxy_info_s* info = __get_tidl_proxy_info_s(uid); if (NULL == info) { info = (tts_tidl_proxy_info_s*)calloc(1, sizeof(tts_tidl_proxy_info_s)); if (NULL == info) { SLOG(LOG_ERROR, tts_tag(), "[TIDL ERROR] Fail to allocate memory for tidl proxy"); + pthread_mutex_unlock(&g_tidl_proxy_infos_mutex); return TTSD_ERROR_OUT_OF_MEMORY; } } else { + g_tidl_proxy_infos = g_list_remove(g_tidl_proxy_infos, info); rpc_port_tts_notify_cb_destroy(info->notify_cb_h); info->notify_cb_h = NULL; } @@ -216,11 +222,11 @@ static int __register_cb_sync(rpc_port_stub_tts_context_h context, int pid, int if (0 != rpc_port_tts_notify_cb_clone(callback, &info->notify_cb_h)) { SLOG(LOG_ERROR, tts_tag(), "[TIDL ERROR] Fail to set notify callback"); free(info); + pthread_mutex_unlock(&g_tidl_proxy_infos_mutex); return TTSD_ERROR_OPERATION_FAILED; } info->uid = uid; - pthread_mutex_lock(&g_tidl_proxy_infos_mutex); g_tidl_proxy_infos = g_list_append(g_tidl_proxy_infos, info); pthread_mutex_unlock(&g_tidl_proxy_infos_mutex);