From 88a5c9a782a2982fe5e5ccbb6582b8a1d4f0040b Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Wed, 6 Dec 2023 13:49:56 +0900 Subject: [PATCH] Add locking and unlocking mutex It is problematic if a callback invoke event is delivered to the main thread while calling callback dispose() in the sub-thread. To fix the thread safe issue, this patch adds locking & unlocking mutex. Change-Id: I4cd8d3a47d40fadc773775f9c6b6aa7a4000ab6e Signed-off-by: Hwankyu Jhun --- idlc/gen/c_proxy_body_gen_cb.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/idlc/gen/c_proxy_body_gen_cb.h b/idlc/gen/c_proxy_body_gen_cb.h index d646f16..f07b170 100644 --- a/idlc/gen/c_proxy_body_gen_cb.h +++ b/idlc/gen/c_proxy_body_gen_cb.h @@ -278,15 +278,18 @@ int ___dispose(__h proxy, _mutex); found = g_list_find(proxy->delegates, h); if (found == nullptr) { _E("Invalid parameter"); + g_rec_mutex_unlock(&proxy->mutex); return RPC_PORT_ERROR_INVALID_PARAMETER; } proxy->delegates = g_list_remove_link(proxy->delegates, found); ___destroy(h); g_list_free(found); + g_rec_mutex_unlock(&proxy->mutex); return RPC_PORT_ERROR_NONE; } @@ -562,7 +565,9 @@ static void ____received(const char *endpoint, const char *port_na return; } + g_rec_mutex_lock(&h->mutex); ____process_received_event(&h->delegates, parcel); + g_rec_mutex_unlock(&h->mutex); rpc_port_parcel_destroy(parcel); } -- 2.7.4