[v2] Add locking and unlocking mutex
authorHwankyu Jhun <h.jhun@samsung.com>
Wed, 6 Dec 2023 06:32:27 +0000 (15:32 +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: I3617a0896463ea2bea3574e00812a937b179b6ec
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
idlc/gen/version2/c_proxy_body_generator_cb.hh

index b2b377f063d2ed94b759dbe0b727082c9f14c5a2..40602f53bb9bed709234e45baea1930e47696a38 100644 (file)
@@ -366,15 +366,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;
 }
@@ -627,7 +630,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, map);
+  g_rec_mutex_unlock(&h->mutex);
   rpc_port_unit_map_destroy(map);
 }
 )__c_cb";