Add locking and unlocking mutex
authorHwankyu Jhun <h.jhun@samsung.com>
Wed, 6 Dec 2023 04:49:56 +0000 (13:49 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Wed, 6 Dec 2023 07:15:03 +0000 (16:15 +0900)
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 <h.jhun@samsung.com>
idlc/gen/c_proxy_body_gen_cb.h

index d646f16..f07b170 100644 (file)
@@ -278,15 +278,18 @@ int <PREFIX>_<NAME>_<DELEGATE_NAME>_dispose(<PREFIX>_<NAME>_h proxy, <PREFIX>_<N
     return RPC_PORT_ERROR_INVALID_PARAMETER;
   }
 
+  g_rec_mutex_lock(&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);
   <PREFIX>_<NAME>_<DELEGATE_NAME>_destroy(h);
   g_list_free(found);
+  g_rec_mutex_unlock(&proxy->mutex);
 
   return RPC_PORT_ERROR_NONE;
 }
@@ -562,7 +565,9 @@ static void __<PREFIX>_<NAME>_received(const char *endpoint, const char *port_na
     return;
   }
 
+  g_rec_mutex_lock(&h->mutex);
   __<PREFIX>_<NAME>_process_received_event(&h->delegates, parcel);
+  g_rec_mutex_unlock(&h->mutex);
   rpc_port_parcel_destroy(parcel);
 }