Make mutex cover all access of g_tidl_proxy_infos 10/262310/1
authorSuyeon Hwang <stom.hwang@samsung.com>
Fri, 6 Aug 2021 08:42:53 +0000 (17:42 +0900)
committerSuyeon Hwang <stom.hwang@samsung.com>
Fri, 6 Aug 2021 08:42:53 +0000 (17:42 +0900)
Change-Id: I917d28f6c529cf2f20ef31c05967ab525479d893
Signed-off-by: Suyeon Hwang <stom.hwang@samsung.com>
server/ttsd_tidl.c

index 06d5012..744b25f 100644 (file)
@@ -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);