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 d0a4faa1a74cec5bbf04f0019b0333515148dcc2..90b1864997a94dbb781d1f4711becca2c3382b6d 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 b36ce057eacee17af9c83c7b00b5db4747b1870a..654c3792f3f23da8dce487c2ed22f5a2e06f3a8e 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 e018219e6ead92f90d45858129ff16a626400bce..09c798dfa04ac7aea165677430dc8b307bda2146 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 c0ce81ef38d1f210cdd47b850e6aa9411a7eb3d4..baee57bfc9510f9527fddbe6c15d21412702e4f7 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 379ec33966dcd16785b1daf1a5b2e0ceef137d0c..174155efb82cc4dcb41f4c8b8adaa9180dafa3d8 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 ce3ca7f26d719953dcd9786449f4ad9d2b0a61ab..a823eda193d6e690f213e56d231b9a8da399aebd 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 c5a43205214fbefbd7338cf134e96d6adec4ab6a..d75a50ca98d32561076e6a29d370bc36d22ba688 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 c50daee3107729a5566046ad27f58a5f749b1975..04e4d08517763fc61495cc28aee763f1002024b4 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 f70cf2ddd52b2acd141ccd93b0e54547cdb276b8..d23db49b81b18ef0f94c971222b0f90135cbeccb 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 0ec4eba6069da79969f62ec7d8ab1df947c1487c..a2efca41196eda0cc1bc1f078ef3568cca70fe13 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 94b141c6f29c44b4fb2c5a97afd248dfaa517397..1e11cdcbb2e2ab9a9d52a62265b73dd4e2cbc48b 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 b11fd514c2fd262e5b338803ad4d77f5e15f0328..45a40bbf24f02098ada45188a33d28a629d2c792 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 fae88c39ece310f80000011cd4bfe309dcff02fa..d7a1db75963796134b175e3727dd8aeddce3bc24 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 d5fbb40b4d28908217032b3d05fb773a53137921..db1d5cdfb800daa84db07face84975c338fa45c1 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 fa405f5bbea62c15224a41082cacf0f12fd80755..3e19d4afc03aa7ec2ad966a9cd98d57d859b82a4 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 1d867f0bbd8ac7d07f1999cf011ad75a2ff93be9..aa85106619b309277b22e6ead6ace1d81c574c99 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 313a78d6ac1bdbefcf57747353baf4215cb27ca3..0c132e6ac6bef731b91852f2110facd253a4a36a 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 bd44dc24a78daeb3fdd97ab87930699cf2120634..011497eaaeca39b26835c7e79d9c40e188e951bc 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 60b601679f09f5a2b2340b60a8b81c42142affdd..698f38cd06a0754e116e1d1d9252a02369736a53 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 a930dde611414dcbf94d1d52ad8dd12e14417297..462f24a96f74dba7b2ad22319219b761dd39c622 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 4a2474daa5dbdc25445c21475e945cd3d72da79d..9ecdb514b20df6f095322215f6a4322c8474b8ad 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 9ee9a6c8e7005091617ae7f893296781acdf89b3..4dbb1b7825e619a1f7f87821b843186ab59a7a8b 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 5d0c6a9ee8ba3057a3469252591e7c363e58fd26..31d55d46e0be7af05dd8fbbd1e2bf860ccfbeed0 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 f8ae5c448106a4bd32206b53810563b90e66d030..25828d952b2b22b7f21dce6db842df569dce6eac 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 4ece5951b48d9020b40e06c933c12c9fb86c1dc9..2663b7a08cbcc93186ff1b4a27034c9b1f01db82 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 01813ea3ec7e928a7e5799d016c94708f20077b4..a63d76dd87b62991f09cb457a86b9e19c56010bf 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 eb613401791bb360b9eb660007ccd63fbd754a1a..2a5cf55a05a1d267f3b2643dc4a9903d70d3e882 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 a80bb6dbeac68b45b6d859c15436d9b4d6fceb73..b779bfad9aaa9497e40fc772ba44baa5b72b75a4 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