From 0d16cb9609c607e6e5267d1ca6e7fd9e406759cd Mon Sep 17 00:00:00 2001 From: Ilho Kim Date: Thu, 22 Sep 2022 21:47:15 +0900 Subject: [PATCH] Remove unnecessary call of copy constructor 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 --- src/server/create_cache_request.cc | 4 ++-- src/server/create_cache_request.hh | 2 +- src/server/pkg_request.cc | 6 ++++-- src/server/pkg_request.hh | 4 +++- src/server/request_handler/abstract_request_handler.cc | 10 ++++++++++ src/server/request_handler/abstract_request_handler.hh | 5 ++++- src/server/request_handler/command_request_handler.cc | 10 ---------- src/server/request_handler/command_request_handler.hh | 5 ----- src/server/request_handler/create_cache_request_handler.cc | 6 ++++-- src/server/request_handler/create_cache_request_handler.hh | 3 +-- src/server/request_handler/create_db_request_handler.cc | 11 ----------- src/server/request_handler/create_db_request_handler.hh | 5 ----- src/server/request_handler/get_appinfo_request_handler.cc | 11 ----------- src/server/request_handler/get_appinfo_request_handler.hh | 5 ----- src/server/request_handler/get_cert_request_handler.cc | 11 ----------- src/server/request_handler/get_cert_request_handler.hh | 5 ----- src/server/request_handler/get_depinfo_request_handler.cc | 11 ----------- src/server/request_handler/get_depinfo_request_handler.hh | 5 ----- src/server/request_handler/get_pkginfo_request_handler.cc | 11 ----------- src/server/request_handler/get_pkginfo_request_handler.hh | 5 ----- src/server/request_handler/query_request_handler.cc | 11 ----------- src/server/request_handler/query_request_handler.hh | 5 ----- src/server/request_handler/request_handler_direct_access.cc | 7 ++++--- src/server/request_handler/set_cert_request_handler.cc | 11 ----------- src/server/request_handler/set_cert_request_handler.hh | 3 --- src/server/request_handler/set_pkginfo_request_handler.cc | 11 ----------- src/server/request_handler/set_pkginfo_request_handler.hh | 3 --- src/server/worker_thread.cc | 6 ++---- 28 files changed, 35 insertions(+), 157 deletions(-) diff --git a/src/server/create_cache_request.cc b/src/server/create_cache_request.cc index d0a4faa..90b1864 100644 --- a/src/server/create_cache_request.cc +++ b/src/server/create_cache_request.cc @@ -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(data[0]); +bool CreateCacheRequest::SendData(tizen_base::Parcel parcel) { + bool ret = static_cast((parcel.GetRaw().data())[0]); if (listener_ != nullptr) listener_->OnCreateCacheDone(ret); diff --git a/src/server/create_cache_request.hh b/src/server/create_cache_request.hh index b36ce05..654c379 100644 --- a/src/server/create_cache_request.hh +++ b/src/server/create_cache_request.hh @@ -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: diff --git a/src/server/pkg_request.cc b/src/server/pkg_request.cc index e018219..09c798d 100644 --- a/src/server/pkg_request.cc +++ b/src/server/pkg_request.cc @@ -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& 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() { diff --git a/src/server/pkg_request.hh b/src/server/pkg_request.hh index c0ce81e..baee57b 100644 --- a/src/server/pkg_request.hh +++ b/src/server/pkg_request.hh @@ -24,6 +24,8 @@ #include "data_socket.hh" #include "request_type.hh" +#include + 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); diff --git a/src/server/request_handler/abstract_request_handler.cc b/src/server/request_handler/abstract_request_handler.cc index 379ec33..174155e 100644 --- a/src/server/request_handler/abstract_request_handler.cc +++ b/src/server/request_handler/abstract_request_handler.cc @@ -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& raw = parcel.GetRaw(); + + result_.reset(); + + return parcel; +} + } // namespace request_handler } // namespace pkgmgr_server diff --git a/src/server/request_handler/abstract_request_handler.hh b/src/server/request_handler/abstract_request_handler.hh index ce3ca7f..a823eda 100644 --- a/src/server/request_handler/abstract_request_handler.hh +++ b/src/server/request_handler/abstract_request_handler.hh @@ -5,6 +5,8 @@ #ifndef SERVER_ABSTRACT_REQUEST_HANDLER_HH_ #define SERVER_ABSTRACT_REQUEST_HANDLER_HH_ +#include "abstract_parcelable.hh" + #include #include @@ -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 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 result_; pid_t GetPID(); uid_t GetUID(); diff --git a/src/server/request_handler/command_request_handler.cc b/src/server/request_handler/command_request_handler.cc index c5a4320..d75a50c 100644 --- a/src/server/request_handler/command_request_handler.cc +++ b/src/server/request_handler/command_request_handler.cc @@ -52,15 +52,5 @@ bool CommandRequestHandler::HandleRequest(const unsigned char* data, int size, return true; } -std::vector CommandRequestHandler::ExtractResult() { - tizen_base::Parcel parcel; - - parcel.WriteParcelable(*result_); - std::vector raw = parcel.GetRaw(); - result_.reset(); - - return raw; -} - } // namespace request_handler } // namespace pkgmgr_server diff --git a/src/server/request_handler/command_request_handler.hh b/src/server/request_handler/command_request_handler.hh index c50daee..04e4d08 100644 --- a/src/server/request_handler/command_request_handler.hh +++ b/src/server/request_handler/command_request_handler.hh @@ -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 ExtractResult() override; - - private: - std::shared_ptr result_; }; } // namespace request_handler diff --git a/src/server/request_handler/create_cache_request_handler.cc b/src/server/request_handler/create_cache_request_handler.cc index f70cf2d..d23db49 100644 --- a/src/server/request_handler/create_cache_request_handler.cc +++ b/src/server/request_handler/create_cache_request_handler.cc @@ -73,8 +73,10 @@ bool CreateCacheRequestHandler::HandleRequest(const unsigned char* data, int siz return success_; } -std::vector CreateCacheRequestHandler::ExtractResult() { - return { static_cast(success_) }; +tizen_base::Parcel CreateCacheRequestHandler::ExtractResult() { + tizen_base::Parcel parcel; + parcel.WriteBool(success_); + return parcel; } void CreateCacheRequestHandler::PreExec() { diff --git a/src/server/request_handler/create_cache_request_handler.hh b/src/server/request_handler/create_cache_request_handler.hh index 0ec4eba..a2efca4 100644 --- a/src/server/request_handler/create_cache_request_handler.hh +++ b/src/server/request_handler/create_cache_request_handler.hh @@ -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 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 result_; Scheduler scheduler_; }; diff --git a/src/server/request_handler/create_db_request_handler.cc b/src/server/request_handler/create_db_request_handler.cc index 94b141c..1e11cdc 100644 --- a/src/server/request_handler/create_db_request_handler.cc +++ b/src/server/request_handler/create_db_request_handler.cc @@ -56,16 +56,5 @@ bool CreateDBRequestHandler::HandleRequest(const unsigned char* data, int size, return true; } -std::vector CreateDBRequestHandler::ExtractResult() { - tizen_base::Parcel parcel; - - parcel.WriteParcelable(*result_); - std::vector raw = parcel.GetRaw(); - - result_.reset(); - - return raw; -} - } // namespace request_handler } // namespace pkgmgr_server diff --git a/src/server/request_handler/create_db_request_handler.hh b/src/server/request_handler/create_db_request_handler.hh index b11fd51..45a40bb 100644 --- a/src/server/request_handler/create_db_request_handler.hh +++ b/src/server/request_handler/create_db_request_handler.hh @@ -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 ExtractResult() override; - - private: - std::shared_ptr result_; }; } // namespace request_handler diff --git a/src/server/request_handler/get_appinfo_request_handler.cc b/src/server/request_handler/get_appinfo_request_handler.cc index fae88c3..d7a1db7 100644 --- a/src/server/request_handler/get_appinfo_request_handler.cc +++ b/src/server/request_handler/get_appinfo_request_handler.cc @@ -49,16 +49,5 @@ bool GetAppinfoRequestHandler::HandleRequest(const unsigned char* data, return true; } -std::vector GetAppinfoRequestHandler::ExtractResult() { - tizen_base::Parcel parcel; - - parcel.WriteParcelable(*result_); - std::vector raw = parcel.GetRaw(); - - result_.reset(); - - return raw; -} - } // namespace request_handler } // namespace pkgmgr_server diff --git a/src/server/request_handler/get_appinfo_request_handler.hh b/src/server/request_handler/get_appinfo_request_handler.hh index d5fbb40..db1d5cd 100644 --- a/src/server/request_handler/get_appinfo_request_handler.hh +++ b/src/server/request_handler/get_appinfo_request_handler.hh @@ -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 ExtractResult() override; - - private: - std::shared_ptr result_; }; } // namespace request_handler diff --git a/src/server/request_handler/get_cert_request_handler.cc b/src/server/request_handler/get_cert_request_handler.cc index fa405f5..3e19d4a 100644 --- a/src/server/request_handler/get_cert_request_handler.cc +++ b/src/server/request_handler/get_cert_request_handler.cc @@ -50,16 +50,5 @@ bool GetCertRequestHandler::HandleRequest(const unsigned char* data, int size, return true; } -std::vector GetCertRequestHandler::ExtractResult() { - tizen_base::Parcel parcel; - - parcel.WriteParcelable(*result_); - std::vector raw = parcel.GetRaw(); - - result_.reset(); - - return raw; -} - } // namespace request_handler } // namespace pkgmgr_server diff --git a/src/server/request_handler/get_cert_request_handler.hh b/src/server/request_handler/get_cert_request_handler.hh index 1d867f0..aa85106 100644 --- a/src/server/request_handler/get_cert_request_handler.hh +++ b/src/server/request_handler/get_cert_request_handler.hh @@ -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 ExtractResult() override; - - private: - std::shared_ptr result_; }; } // namespace request_handler diff --git a/src/server/request_handler/get_depinfo_request_handler.cc b/src/server/request_handler/get_depinfo_request_handler.cc index 313a78d..0c132e6 100644 --- a/src/server/request_handler/get_depinfo_request_handler.cc +++ b/src/server/request_handler/get_depinfo_request_handler.cc @@ -49,16 +49,5 @@ bool GetDepinfoRequestHandler::HandleRequest(const unsigned char* data, int size return true; } -std::vector GetDepinfoRequestHandler::ExtractResult() { - tizen_base::Parcel parcel; - - parcel.WriteParcelable(*result_); - std::vector raw = parcel.GetRaw(); - - result_.reset(); - - return raw; -} - } // namespace request_handler } // namespace pkgmgr_server diff --git a/src/server/request_handler/get_depinfo_request_handler.hh b/src/server/request_handler/get_depinfo_request_handler.hh index bd44dc2..011497e 100644 --- a/src/server/request_handler/get_depinfo_request_handler.hh +++ b/src/server/request_handler/get_depinfo_request_handler.hh @@ -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 ExtractResult() override; - - private: - std::shared_ptr result_; - }; } // namespace request_handler diff --git a/src/server/request_handler/get_pkginfo_request_handler.cc b/src/server/request_handler/get_pkginfo_request_handler.cc index 60b6016..698f38c 100644 --- a/src/server/request_handler/get_pkginfo_request_handler.cc +++ b/src/server/request_handler/get_pkginfo_request_handler.cc @@ -50,16 +50,5 @@ bool GetPkginfoRequestHandler::HandleRequest(const unsigned char* data, return true; } -std::vector GetPkginfoRequestHandler::ExtractResult() { - tizen_base::Parcel parcel; - - parcel.WriteParcelable(*result_); - std::vector raw = parcel.GetRaw(); - - result_.reset(); - - return raw; -} - } // namespace request_handler } // namespace pkgmgr_server diff --git a/src/server/request_handler/get_pkginfo_request_handler.hh b/src/server/request_handler/get_pkginfo_request_handler.hh index a930dde..462f24a 100644 --- a/src/server/request_handler/get_pkginfo_request_handler.hh +++ b/src/server/request_handler/get_pkginfo_request_handler.hh @@ -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 ExtractResult() override; - - private: - std::shared_ptr result_; }; } // namespace request_handler diff --git a/src/server/request_handler/query_request_handler.cc b/src/server/request_handler/query_request_handler.cc index 4a2474d..9ecdb51 100644 --- a/src/server/request_handler/query_request_handler.cc +++ b/src/server/request_handler/query_request_handler.cc @@ -52,16 +52,5 @@ bool QueryRequestHandler::HandleRequest(const unsigned char* data, int size, return true; } -std::vector QueryRequestHandler::ExtractResult() { - tizen_base::Parcel parcel; - - parcel.WriteParcelable(*result_); - std::vector raw = parcel.GetRaw(); - - result_.reset(); - - return raw; -} - } // namespace request_handler } // namespace pkgmgr_server diff --git a/src/server/request_handler/query_request_handler.hh b/src/server/request_handler/query_request_handler.hh index 9ee9a6c..4dbb1b7 100644 --- a/src/server/request_handler/query_request_handler.hh +++ b/src/server/request_handler/query_request_handler.hh @@ -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 ExtractResult() override; - -private: - std::shared_ptr result_; - }; } // namespace request_handler diff --git a/src/server/request_handler/request_handler_direct_access.cc b/src/server/request_handler/request_handler_direct_access.cc index 5d0c6a9..31d55d4 100644 --- a/src/server/request_handler/request_handler_direct_access.cc +++ b/src/server/request_handler/request_handler_direct_access.cc @@ -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& 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(); } diff --git a/src/server/request_handler/set_cert_request_handler.cc b/src/server/request_handler/set_cert_request_handler.cc index f8ae5c4..25828d9 100644 --- a/src/server/request_handler/set_cert_request_handler.cc +++ b/src/server/request_handler/set_cert_request_handler.cc @@ -51,16 +51,5 @@ bool SetCertRequestHandler::HandleRequest(const unsigned char* data, int size, return true; } -std::vector SetCertRequestHandler::ExtractResult() { - tizen_base::Parcel parcel; - - parcel.WriteParcelable(*result_); - std::vector raw = parcel.GetRaw(); - - result_.reset(); - - return raw; -} - } // namespace request_handler } // namespace pkgmgr_server diff --git a/src/server/request_handler/set_cert_request_handler.hh b/src/server/request_handler/set_cert_request_handler.hh index 4ece595..2663b7a 100644 --- a/src/server/request_handler/set_cert_request_handler.hh +++ b/src/server/request_handler/set_cert_request_handler.hh @@ -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 ExtractResult() override; - private: bool is_offline_; - std::shared_ptr result_; }; } // namespace request_handler diff --git a/src/server/request_handler/set_pkginfo_request_handler.cc b/src/server/request_handler/set_pkginfo_request_handler.cc index 01813ea..a63d76d 100644 --- a/src/server/request_handler/set_pkginfo_request_handler.cc +++ b/src/server/request_handler/set_pkginfo_request_handler.cc @@ -66,16 +66,5 @@ bool SetPkginfoRequestHandler::HandleRequest(const unsigned char* data, return true; } -std::vector SetPkginfoRequestHandler::ExtractResult() { - tizen_base::Parcel parcel; - - parcel.WriteParcelable(*result_); - std::vector raw = parcel.GetRaw(); - - result_.reset(); - - return raw; -} - } // namespace request_handler } // namespace pkgmgr_server diff --git a/src/server/request_handler/set_pkginfo_request_handler.hh b/src/server/request_handler/set_pkginfo_request_handler.hh index eb61340..2a5cf55 100644 --- a/src/server/request_handler/set_pkginfo_request_handler.hh +++ b/src/server/request_handler/set_pkginfo_request_handler.hh @@ -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 ExtractResult() override; - private: bool is_offline_; - std::shared_ptr result_; }; } // namespace request_handler diff --git a/src/server/worker_thread.cc b/src/server/worker_thread.cc index a80bb6d..b779bfa 100644 --- a/src/server/worker_thread.cc +++ b/src/server/worker_thread.cc @@ -146,8 +146,7 @@ void WorkerThread::Run() { locale_.GetObject())) LOG(ERROR) << "Failed to handle request"; - std::vector 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& req) { 0, pkgmgr_common::parcel::ParcelableType::Unknown, PMINFO_R_ERROR); tizen_base::Parcel p; p.WriteParcelable(parcelable); - std::vector raw = p.GetRaw(); - req->SendData(&raw[0], raw.size()); + req->SendData(std::move(p)); } } // namespace pkgmgr_server -- 2.7.4