Modify connect method of proxy 26/286326/7
authorHwankyu Jhun <h.jhun@samsung.com>
Wed, 4 Jan 2023 03:46:37 +0000 (03:46 +0000)
committerHwanKyu Jhun <h.jhun@samsung.com>
Wed, 4 Jan 2023 08:32:34 +0000 (08:32 +0000)
The proxy is able to call the rpc_port_proxy_connect() function after
calling the rpc_port_proxy_disconnect() function.

Change-Id: Ib9cb6758b1792e4f3413164745b5c34819ef51ce
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/proxy-internal.cc
src/proxy-internal.hh

index 518c436..8465ed2 100644 (file)
@@ -197,7 +197,7 @@ int Proxy::Connect(std::string appid, std::string port_name,
     return RPC_PORT_ERROR_INVALID_PARAMETER;
 
   std::lock_guard<std::recursive_mutex> lock(GetMutex());
-  if (listener_ != nullptr) {
+  if (HasRequested()) {
     _D("Already requested");
     return RPC_PORT_ERROR_INVALID_PARAMETER;
   }
@@ -209,6 +209,7 @@ int Proxy::Connect(std::string appid, std::string port_name,
   main_port_.reset();
   delegate_port_.reset();
 
+  Cancel();
   UnsetConnTimer();
   int ret = Aul::PrepareStub(real_appid_, port_name_,
       rpc_port_get_target_uid());
@@ -231,12 +232,12 @@ int Proxy::ConnectSync(std::string appid, std::string port_name,
   if (listener == nullptr)
     return RPC_PORT_ERROR_INVALID_PARAMETER;
 
-  if (listener_ != nullptr) {
-    _W("Already requested");
+  std::lock_guard<std::recursive_mutex> lock(GetMutex());
+  if (HasRequested()) {
+    _D("Already requested");
     return RPC_PORT_ERROR_INVALID_PARAMETER;
   }
 
-  std::lock_guard<std::recursive_mutex> lock(GetMutex());
   listener_ = listener;
   target_appid_ = std::move(appid);
   port_name_ = std::move(port_name);
@@ -801,5 +802,10 @@ void Proxy::DestroyWeakPtr(gpointer data) {
   delete ptr;
 }
 
+bool Proxy::HasRequested() const {
+  return listener_ != nullptr &&
+      (!main_port_ || !delegate_port_ || main_port_->GetFd() > 0);
+}
+
 }  // namespace internal
 }  // namespace rpc_port
index 5003539..2cfef0d 100644 (file)
@@ -130,6 +130,7 @@ class Proxy : public std::enable_shared_from_this<Proxy> {
   std::shared_ptr<Proxy> GetSharedPtr();
   gpointer CreateWeakPtr();
   static void DestroyWeakPtr(gpointer data);
+  bool HasRequested() const;
 
  private:
   std::string port_name_;