Remove unnecessary call of copy constructor 78/281878/5
authorIlho Kim <ilho159.kim@samsung.com>
Thu, 22 Sep 2022 12:47:15 +0000 (21:47 +0900)
committerilho kim <ilho159.kim@samsung.com>
Fri, 23 Sep 2022 08:03:52 +0000 (08:03 +0000)
When the WorkerThread calls the ExtractResult of RequestHandler
the copy constructor of the vector is called
This is an unnecessary operation

Change-Id: Ib2c368cc61a34bab6f9afd42887c902ecdcd78d1
Signed-off-by: Ilho Kim <ilho159.kim@samsung.com>
28 files changed:
src/server/create_cache_request.cc
src/server/create_cache_request.hh
src/server/pkg_request.cc
src/server/pkg_request.hh
src/server/request_handler/abstract_request_handler.cc
src/server/request_handler/abstract_request_handler.hh
src/server/request_handler/command_request_handler.cc
src/server/request_handler/command_request_handler.hh
src/server/request_handler/create_cache_request_handler.cc
src/server/request_handler/create_cache_request_handler.hh
src/server/request_handler/create_db_request_handler.cc
src/server/request_handler/create_db_request_handler.hh
src/server/request_handler/get_appinfo_request_handler.cc
src/server/request_handler/get_appinfo_request_handler.hh
src/server/request_handler/get_cert_request_handler.cc
src/server/request_handler/get_cert_request_handler.hh
src/server/request_handler/get_depinfo_request_handler.cc
src/server/request_handler/get_depinfo_request_handler.hh
src/server/request_handler/get_pkginfo_request_handler.cc
src/server/request_handler/get_pkginfo_request_handler.hh
src/server/request_handler/query_request_handler.cc
src/server/request_handler/query_request_handler.hh
src/server/request_handler/request_handler_direct_access.cc
src/server/request_handler/set_cert_request_handler.cc
src/server/request_handler/set_cert_request_handler.hh
src/server/request_handler/set_pkginfo_request_handler.cc
src/server/request_handler/set_pkginfo_request_handler.hh
src/server/worker_thread.cc

index d0a4faa..90b1864 100644 (file)
@@ -41,8 +41,8 @@ pkgmgr_common::ReqType CreateCacheRequest::GetRequestType() {
   return pkgmgr_common::ReqType::CREATE_CACHE;
 }
 
-bool CreateCacheRequest::SendData(unsigned char* data, int size) {
-  bool ret = static_cast<bool>(data[0]);
+bool CreateCacheRequest::SendData(tizen_base::Parcel parcel) {
+  bool ret = static_cast<bool>((parcel.GetRaw().data())[0]);
   if (listener_ != nullptr)
     listener_->OnCreateCacheDone(ret);
 
index b36ce05..654c379 100644 (file)
@@ -43,7 +43,7 @@ class EXPORT_API CreateCacheRequest : public PkgRequest {
   pid_t GetSenderPID() override;
   uid_t GetSenderUID() override;
   pkgmgr_common::ReqType GetRequestType() override;
-  bool SendData(unsigned char* data, int size) override;
+  bool SendData(tizen_base::Parcel parcel) override;
   bool GetPrivilegeChecked() override;
 
  private:
index e018219..09c798d 100644 (file)
@@ -100,11 +100,13 @@ bool PkgRequest::ReceiveData() {
   return true;
 }
 
-bool PkgRequest::SendData(unsigned char* data, int size) {
+bool PkgRequest::SendData(tizen_base::Parcel parcel) {
+  const std::vector<uint8_t>& raw = parcel.GetRaw();
+  unsigned int size = raw.size();
   if (socket_->SendData(&size, sizeof(size)) < 0)
     return false;
 
-  return (socket_->SendData(data, size) == 0);
+  return (socket_->SendData(raw.data(), size) == 0);
 }
 
 bool PkgRequest::GetPrivilegeChecked() {
index c0ce81e..baee57b 100644 (file)
@@ -24,6 +24,8 @@
 #include "data_socket.hh"
 #include "request_type.hh"
 
+#include <parcel.hh>
+
 namespace pkgmgr_server {
 
 #ifndef EXPORT_API
@@ -44,7 +46,7 @@ class EXPORT_API PkgRequest {
   virtual pid_t GetSenderPID();
   virtual uid_t GetSenderUID();
   virtual pkgmgr_common::ReqType GetRequestType();
-  virtual bool SendData(unsigned char* data, int size);
+  virtual bool SendData(tizen_base::Parcel parcel);
   virtual bool GetPrivilegeChecked();
   virtual void SetPrivilegeChecked(bool cheked);
 
index 379ec33..174155e 100644 (file)
@@ -33,5 +33,15 @@ uid_t AbstractRequestHandler::GetUID() {
   return uid_;
 }
 
+tizen_base::Parcel AbstractRequestHandler::ExtractResult() {
+  tizen_base::Parcel parcel;
+  parcel.WriteParcelable(*result_);
+  const std::vector<uint8_t>& raw = parcel.GetRaw();
+
+  result_.reset();
+
+  return parcel;
+}
+
 }  // namespace request_handler
 }  // namespace pkgmgr_server
index ce3ca7f..a823eda 100644 (file)
@@ -5,6 +5,8 @@
 #ifndef SERVER_ABSTRACT_REQUEST_HANDLER_HH_
 #define SERVER_ABSTRACT_REQUEST_HANDLER_HH_
 
+#include "abstract_parcelable.hh"
+
 #include <string>
 
 #include <sys/types.h>
@@ -24,7 +26,7 @@ class EXPORT_API AbstractRequestHandler {
   virtual bool HandleRequest(const unsigned char* data, int size,
       const std::string& locale) = 0;
 
-  virtual std::vector<uint8_t> ExtractResult() = 0;
+  virtual tizen_base::Parcel ExtractResult();
 
   virtual void PreExec();
   virtual void PostExec();
@@ -32,6 +34,7 @@ class EXPORT_API AbstractRequestHandler {
   void SetUID(uid_t uid);
 
  protected:
+  std::shared_ptr<pkgmgr_common::parcel::AbstractParcelable> result_;
   pid_t GetPID();
   uid_t GetUID();
 
index c5a4320..d75a50c 100644 (file)
@@ -52,15 +52,5 @@ bool CommandRequestHandler::HandleRequest(const unsigned char* data, int size,
   return true;
 }
 
-std::vector<uint8_t> CommandRequestHandler::ExtractResult() {
-  tizen_base::Parcel parcel;
-
-  parcel.WriteParcelable(*result_);
-  std::vector<uint8_t> raw = parcel.GetRaw();
-  result_.reset();
-
-  return raw;
-}
-
 }  // namespace request_handler
 }  // namespace pkgmgr_server
index c50daee..04e4d08 100644 (file)
@@ -22,11 +22,6 @@ class EXPORT_API CommandRequestHandler : public AbstractRequestHandler {
  public:
   bool HandleRequest(const unsigned char* data, int size,
       const std::string& locale) override;
-
-  std::vector<uint8_t> ExtractResult() override;
-
- private:
-  std::shared_ptr<pkgmgr_common::parcel::ResultParcelable> result_;
 };
 
 }  // namespace request_handler
index f70cf2d..d23db49 100644 (file)
@@ -73,8 +73,10 @@ bool CreateCacheRequestHandler::HandleRequest(const unsigned char* data, int siz
   return success_;
 }
 
-std::vector<uint8_t> CreateCacheRequestHandler::ExtractResult() {
-  return { static_cast<uint8_t>(success_) };
+tizen_base::Parcel CreateCacheRequestHandler::ExtractResult() {
+  tizen_base::Parcel parcel;
+  parcel.WriteBool(success_);
+  return parcel;
 }
 
 void CreateCacheRequestHandler::PreExec() {
index 0ec4eba..a2efca4 100644 (file)
@@ -22,7 +22,7 @@ class EXPORT_API CreateCacheRequestHandler : public AbstractRequestHandler {
   CreateCacheRequestHandler();
   bool HandleRequest(const unsigned char* data, int size,
       const std::string& locale) override;
-  std::vector<uint8_t> ExtractResult() override;
+  tizen_base::Parcel ExtractResult() override;
 
   void PreExec() override;
   void PostExec() override;
@@ -46,7 +46,6 @@ class EXPORT_API CreateCacheRequestHandler : public AbstractRequestHandler {
 
  private:
   bool success_ = false;
-  std::shared_ptr<pkgmgr_common::parcel::ResultParcelable> result_;
   Scheduler scheduler_;
 };
 
index 94b141c..1e11cdc 100644 (file)
@@ -56,16 +56,5 @@ bool CreateDBRequestHandler::HandleRequest(const unsigned char* data, int size,
   return true;
 }
 
-std::vector<uint8_t> CreateDBRequestHandler::ExtractResult() {
-  tizen_base::Parcel parcel;
-
-  parcel.WriteParcelable(*result_);
-  std::vector<uint8_t> raw = parcel.GetRaw();
-
-  result_.reset();
-
-  return raw;
-}
-
 }  // namespace request_handler
 }  // namespace pkgmgr_server
index b11fd51..45a40bb 100644 (file)
@@ -21,11 +21,6 @@ class EXPORT_API CreateDBRequestHandler : public AbstractRequestHandler {
  public:
   bool HandleRequest(const unsigned char* data, int size,
       const std::string& locale) override;
-
-  std::vector<uint8_t> ExtractResult() override;
-
- private:
-  std::shared_ptr<pkgmgr_common::parcel::ResultParcelable> result_;
 };
 
 }  // namespace request_handler
index fae88c3..d7a1db7 100644 (file)
@@ -49,16 +49,5 @@ bool GetAppinfoRequestHandler::HandleRequest(const unsigned char* data,
   return true;
 }
 
-std::vector<uint8_t> GetAppinfoRequestHandler::ExtractResult() {
-  tizen_base::Parcel parcel;
-
-  parcel.WriteParcelable(*result_);
-  std::vector<uint8_t> raw = parcel.GetRaw();
-
-  result_.reset();
-
-  return raw;
-}
-
 }  // namespace request_handler
 }  // namespace pkgmgr_server
index d5fbb40..db1d5cd 100644 (file)
@@ -21,11 +21,6 @@ class EXPORT_API GetAppinfoRequestHandler : public AbstractRequestHandler {
  public:
   bool HandleRequest(const unsigned char* data, int size,
       const std::string &locale) override;
-
-  std::vector<uint8_t> ExtractResult() override;
-
- private:
-  std::shared_ptr<pkgmgr_common::parcel::AppInfoParcelable> result_;
 };
 
 }  // namespace request_handler
index fa405f5..3e19d4a 100644 (file)
@@ -50,16 +50,5 @@ bool GetCertRequestHandler::HandleRequest(const unsigned char* data, int size,
   return true;
 }
 
-std::vector<uint8_t> GetCertRequestHandler::ExtractResult() {
-  tizen_base::Parcel parcel;
-
-  parcel.WriteParcelable(*result_);
-  std::vector<uint8_t> raw = parcel.GetRaw();
-
-  result_.reset();
-
-  return raw;
-}
-
 }  // namespace request_handler
 }  // namespace pkgmgr_server
index 1d867f0..aa85106 100644 (file)
@@ -21,11 +21,6 @@ class EXPORT_API GetCertRequestHandler : public AbstractRequestHandler {
  public:
   bool HandleRequest(const unsigned char* data, int size,
       const std::string& locale) override;
-
-  std::vector<uint8_t> ExtractResult() override;
-
- private:
-  std::shared_ptr<pkgmgr_common::parcel::CertInfoParcelable> result_;
 };
 
 }  // namespace request_handler
index 313a78d..0c132e6 100644 (file)
@@ -49,16 +49,5 @@ bool GetDepinfoRequestHandler::HandleRequest(const unsigned char* data, int size
   return true;
 }
 
-std::vector<uint8_t> GetDepinfoRequestHandler::ExtractResult() {
-  tizen_base::Parcel parcel;
-
-  parcel.WriteParcelable(*result_);
-  std::vector<uint8_t> raw = parcel.GetRaw();
-
-  result_.reset();
-
-  return raw;
-}
-
 }  // namespace request_handler
 }  // namespace pkgmgr_server
index bd44dc2..011497e 100644 (file)
@@ -22,11 +22,6 @@ class EXPORT_API GetDepinfoRequestHandler : public AbstractRequestHandler {
   bool HandleRequest(const unsigned char* data, int size,
       const std::string& locale) override;
 
-  std::vector<uint8_t> ExtractResult() override;
-
- private:
-  std::shared_ptr<pkgmgr_common::parcel::DepInfoParcelable> result_;
-
 };
 
 }  // namespace request_handler
index 60b6016..698f38c 100644 (file)
@@ -50,16 +50,5 @@ bool GetPkginfoRequestHandler::HandleRequest(const unsigned char* data,
   return true;
 }
 
-std::vector<uint8_t> GetPkginfoRequestHandler::ExtractResult() {
-  tizen_base::Parcel parcel;
-
-  parcel.WriteParcelable(*result_);
-  std::vector<uint8_t> raw = parcel.GetRaw();
-
-  result_.reset();
-
-  return raw;
-}
-
 }  // namespace request_handler
 }  // namespace pkgmgr_server
index a930dde..462f24a 100644 (file)
@@ -21,11 +21,6 @@ class EXPORT_API GetPkginfoRequestHandler : public AbstractRequestHandler {
  public:
   bool HandleRequest(const unsigned char* data, int size,
       const std::string& locale) override;
-
-  std::vector<uint8_t> ExtractResult() override;
-
- private:
-  std::shared_ptr<pkgmgr_common::parcel::PkgInfoParcelable> result_;
 };
 
 }  // namespace request_handler
index 4a2474d..9ecdb51 100644 (file)
@@ -52,16 +52,5 @@ bool QueryRequestHandler::HandleRequest(const unsigned char* data, int size,
   return true;
 }
 
-std::vector<uint8_t> QueryRequestHandler::ExtractResult() {
-  tizen_base::Parcel parcel;
-
-  parcel.WriteParcelable(*result_);
-  std::vector<uint8_t> raw = parcel.GetRaw();
-
-  result_.reset();
-
-  return raw;
-}
-
 }  // namespace request_handler
 }  // namespace pkgmgr_server
index 9ee9a6c..4dbb1b7 100644 (file)
@@ -23,11 +23,6 @@ class EXPORT_API QueryRequestHandler : public AbstractRequestHandler {
   bool HandleRequest(const unsigned char* data, int size,
       const std::string& locale) override;
 
-  std::vector<uint8_t> ExtractResult() override;
-
-private:
- std::shared_ptr<pkgmgr_common::parcel::ResultParcelable> result_;
-
 };
 
 }  // namespace request_handler
index 5d0c6a9..31d55d4 100644 (file)
@@ -94,13 +94,14 @@ extern "C" EXPORT_API void* _request_handler_direct_access(int req_type,
     LOG(ERROR) << "Failed to handle request";
     return nullptr;
   }
-  auto result = handler->ExtractResult();
-  if (result.size() == 0) {
+  tizen_base::Parcel parcel = handler->ExtractResult();
+  const std::vector<uint8_t>& raw = parcel.GetRaw();
+  if (raw.size() == 0) {
     LOG(ERROR) << "Fail to extract result";
     return nullptr;
   }
 
   return pkgmgr_common::parcel::ParcelableFactory::GetInst()
-      .CreateParcel(&result[0], result.size())
+      .CreateParcel(&raw[0], raw.size())
       .release();
 }
index f8ae5c4..25828d9 100644 (file)
@@ -51,16 +51,5 @@ bool SetCertRequestHandler::HandleRequest(const unsigned char* data, int size,
   return true;
 }
 
-std::vector<uint8_t> SetCertRequestHandler::ExtractResult() {
-  tizen_base::Parcel parcel;
-
-  parcel.WriteParcelable(*result_);
-  std::vector<uint8_t> raw = parcel.GetRaw();
-
-  result_.reset();
-
-  return raw;
-}
-
 }  // namespace request_handler
 }  // namespace pkgmgr_server
index 4ece595..2663b7a 100644 (file)
@@ -24,11 +24,8 @@ class EXPORT_API SetCertRequestHandler : public AbstractRequestHandler {
   bool HandleRequest(const unsigned char* data, int size,
       const std::string& locale) override;
 
-  std::vector<uint8_t> ExtractResult() override;
-
  private:
   bool is_offline_;
-  std::shared_ptr<pkgmgr_common::parcel::ResultParcelable> result_;
 };
 
 }  // namespace request_handler
index 01813ea..a63d76d 100644 (file)
@@ -66,16 +66,5 @@ bool SetPkginfoRequestHandler::HandleRequest(const unsigned char* data,
   return true;
 }
 
-std::vector<uint8_t> SetPkginfoRequestHandler::ExtractResult() {
-  tizen_base::Parcel parcel;
-
-  parcel.WriteParcelable(*result_);
-  std::vector<uint8_t> raw = parcel.GetRaw();
-
-  result_.reset();
-
-  return raw;
-}
-
 }  // namespace request_handler
 }  // namespace pkgmgr_server
index eb61340..2a5cf55 100644 (file)
@@ -24,11 +24,8 @@ class EXPORT_API SetPkginfoRequestHandler : public AbstractRequestHandler {
   bool HandleRequest(const unsigned char* data, int size,
       const std::string& locale) override;
 
-  std::vector<uint8_t> ExtractResult() override;
-
  private:
   bool is_offline_;
-  std::shared_ptr<pkgmgr_common::parcel::ResultParcelable> result_;
 };
 
 }  // namespace request_handler
index a80bb6d..b779bfa 100644 (file)
@@ -146,8 +146,7 @@ void WorkerThread::Run() {
           locale_.GetObject()))
         LOG(ERROR) << "Failed to handle request";
 
-      std::vector<uint8_t> result_data = handler->ExtractResult();
-      if (req->SendData(result_data.data(), result_data.size()) == false)
+      if (req->SendData(handler->ExtractResult()) == false)
         LOG(ERROR) << "Failed to send response pid: " << req->GetSenderPID();
       else
         LOG(WARNING) << "Success response pid: " << req->GetSenderPID();
@@ -200,8 +199,7 @@ void WorkerThread::SendError(const std::shared_ptr<PkgRequest>& req) {
       0, pkgmgr_common::parcel::ParcelableType::Unknown, PMINFO_R_ERROR);
   tizen_base::Parcel p;
   p.WriteParcelable(parcelable);
-  std::vector<uint8_t> raw = p.GetRaw();
-  req->SendData(&raw[0], raw.size());
+  req->SendData(std::move(p));
 }
 
 }  // namespace pkgmgr_server