Use try_lock() to get lock 72/181072/1
authorJunghoon Park <jh9216.park@samsung.com>
Fri, 8 Jun 2018 02:36:24 +0000 (11:36 +0900)
committerJunghoon Park <jh9216.park@samsung.com>
Fri, 8 Jun 2018 02:36:24 +0000 (11:36 +0900)
- Ignore event when other threads are sending something

Change-Id: I2eba4d0b9f49992dae5232173d68171b7aeb592b
Signed-off-by: Junghoon Park <jh9216.park@samsung.com>
idlc/c_gen/c_proxy_body_gen_cb.h
idlc/cpp_gen/cpp_proxy_body_gen_cb.h

index 94c43e31d1a98a45b0ffdc35f5ea364f78d40cfa..86529ccc0076fd21c70fbb973611db502b369afd 100644 (file)
@@ -253,7 +253,8 @@ static void __##_on_received(const char *endpoint, const char *port_name, void *
     rpc_port_parcel_h parcel_received;
     int cmd = -1;
 
-    g_rec_mutex_lock(&handle->mutex);
+    if (g_rec_mutex_trylock(&handle->mutex) == FALSE)
+        return;
     rpc_port_parcel_create_from_port(&parcel_received, handle->port);
     rpc_port_parcel_read_int32(parcel_received, &cmd);
     if (cmd != ##_METHOD_Callback) {
index e24a069b791173e8b15cf9e9f0e8597fb9f4fa79..320801133419cd01b10199397dec3b4c65741d80 100644 (file)
@@ -141,12 +141,15 @@ void ##::OnReceivedCB(const char *ep, const char *port_name, void *data) {
   int cmd;
   rpc_port_parcel_h parcel_received;
 
-  do {
-    std::lock_guard<std::recursive_mutex> lock(l->mutex_);
-    if (rpc_port_parcel_create_from_port(&parcel_received, l->port_) != 0)
-      return;
-  } while (false);
+  if (!l->mutex_.try_lock())
+    return;
+
+  if (rpc_port_parcel_create_from_port(&parcel_received, l->port_) != 0) {
+    l->mutex_.unlock();
+    return;
+  }
 
+  l->mutex_unlock();
   rpc_port_parcel_read_int32(parcel_received, &cmd);
   if (cmd != static_cast<int>(MethodId::__Callback)) {
     rpc_port_parcel_destroy(parcel_received);