Change return type to handle exceptions 66/163566/1
authorJunghoon Park <jh9216.park@samsung.com>
Tue, 12 Dec 2017 05:47:24 +0000 (14:47 +0900)
committerJunghoon Park <jh9216.park@samsung.com>
Tue, 12 Dec 2017 05:47:24 +0000 (14:47 +0900)
Change-Id: Ibb2324bcc52f7215000c731cf7f17d00615e064e
Signed-off-by: Junghoon Park <jh9216.park@samsung.com>
include/rpc-port.h
src/rpc-port.cc
src/stub-internal.cc
src/stub-internal.h
unit_tests/src/rpc_port_test.cc

index efdae49..c20f07d 100755 (executable)
@@ -52,7 +52,7 @@ typedef void (*rpc_port_stub_connected_event_cb)(const char *sender,
                void *data);
 typedef void (*rpc_port_stub_disconnected_event_cb)(const char *sender,
                void *data);
-typedef void (*rpc_port_stub_received_event_cb)(const char *sender,
+typedef int (*rpc_port_stub_received_event_cb)(const char *sender,
                rpc_port_h port, void *data);
 int rpc_port_stub_create(rpc_port_stub_h *h, const char *port_name);
 int rpc_port_stub_destroy(rpc_port_stub_h h);
index a0372fa..76db22f 100755 (executable)
@@ -123,10 +123,14 @@ class StubExt : public Stub, public Stub::IEventListener {
     }
   }
 
-  void OnReceived(const std::string& sender, Port& port) override {
+  int OnReceived(const std::string& sender, Port& port) override {
     for (auto& ev : received_events_) {
-      ev->cb_(sender.c_str(), &port, ev->user_data_);
+      int ret = ev->cb_(sender.c_str(), &port, ev->user_data_);
+      if (ret != 0)
+        return -1;
     }
+
+    return 0;
   }
 
  private:
index b4e7728..07c8497 100644 (file)
@@ -51,7 +51,14 @@ gboolean Stub::OnDataReceived(GIOChannel *gio, GIOCondition cond,
 
   for (auto& p : stub->ports_) {
     if (p->GetFd() == fd) {
-      stub->listener_->OnReceived(p->GetId(), *p);
+      int ret = stub->listener_->OnReceived(p->GetId(), *p);
+
+      if (ret != 0) {
+        stub->listener_->OnDisconnected(p->GetId());
+        stub->ports_.remove(p);
+        return FALSE;
+      }
+
       break;
     }
   }
index eec8293..b6d8726 100644 (file)
@@ -37,7 +37,7 @@ class Stub : private FdBroker::IEventListener {
    public:
     virtual void OnConnected(const std::string& sender) = 0;
     virtual void OnDisconnected(const std::string& sender) = 0;
-    virtual void OnReceived(const std::string& sender, Port& port) = 0;
+    virtual int OnReceived(const std::string& sender, Port& port) = 0;
   };
 
   Stub(const std::string& port_name, bool mock = false);
index 92b86dd..b1002b2 100644 (file)
@@ -103,10 +103,11 @@ class RpcPortConnection : public RpcPortBase {
 
   void StubSetup() {
     int ret = rpc_port_stub_add_received_event_cb(stub_handle_,
-        [](const char* sender, rpc_port_h port, void *data) {
+        [](const char* sender, rpc_port_h port, void *data) -> int {
           RpcPortConnection* p = static_cast<RpcPortConnection*>(data);
           p->stub_port_ = port;
           p->Finish();
+          return 0;
         }, this);
     ASSERT_EQ(ret, 0);