From 24941eb128471889a4482dd7b213fadc3cc1b5b8 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Fri, 28 Sep 2018 13:08:14 +0200 Subject: Use std::unique_ptr --- slobrok/src/vespa/slobrok/server/cmd.cpp | 24 ++++++++++++++-------- slobrok/src/vespa/slobrok/server/cmd.h | 20 ++++++------------ .../src/vespa/slobrok/server/exchange_manager.cpp | 10 ++++----- .../vespa/slobrok/server/rpc_server_manager.cpp | 5 ++--- .../src/vespa/slobrok/server/rpc_server_manager.h | 15 +------------- 5 files changed, 29 insertions(+), 45 deletions(-) (limited to 'slobrok/src') diff --git a/slobrok/src/vespa/slobrok/server/cmd.cpp b/slobrok/src/vespa/slobrok/server/cmd.cpp index 0e476c9bfe4..6ce8e3a9db3 100644 --- a/slobrok/src/vespa/slobrok/server/cmd.cpp +++ b/slobrok/src/vespa/slobrok/server/cmd.cpp @@ -35,21 +35,28 @@ public: {} }; +RegRpcSrvCommand::RegRpcSrvCommand(std::unique_ptr data) + : _data(std::move(data)) +{} + +RegRpcSrvCommand::RegRpcSrvCommand(RegRpcSrvCommand &&) = default; +RegRpcSrvCommand & RegRpcSrvCommand::operator =(RegRpcSrvCommand &&) = default; +RegRpcSrvCommand::~RegRpcSrvCommand() = default; + RegRpcSrvCommand RegRpcSrvCommand::makeRegRpcSrvCmd(SBEnv &env, const std::string &name, const std::string &spec, FRT_RPCRequest *req) { - RegRpcSrvData *data = new RegRpcSrvData(env, name, spec, req); - return RegRpcSrvCommand(data); + return RegRpcSrvCommand(std::make_unique(env, name, spec, req)); } RegRpcSrvCommand RegRpcSrvCommand::makeRemRemCmd(SBEnv &env, const std::string & name, const std::string &spec) { - RegRpcSrvData *data = new RegRpcSrvData(env, name, spec, nullptr); + auto data = std::make_unique(env, name, spec, nullptr); data->_state = RegRpcSrvData::XCH_IGNORE; - return RegRpcSrvCommand(data); + return RegRpcSrvCommand(std::move(data)); } @@ -93,18 +100,18 @@ RegRpcSrvCommand::doneHandler(OkState result) LOG(spam, "phase wantAdd(%s,%s)", _data->name.c_str(), _data->spec.c_str()); _data->_state = RegRpcSrvData::XCH_WANTADD; - _data->env._exchanger.wantAdd(_data->name.c_str(), _data->spec.c_str(), *this); + _data->env._exchanger.wantAdd(_data->name.c_str(), _data->spec.c_str(), std::move(*this)); return; } else if (_data->_state == RegRpcSrvData::XCH_WANTADD) { LOG(spam, "phase addManaged(%s,%s)", _data->name.c_str(), _data->spec.c_str()); _data->_state = RegRpcSrvData::CHK_RPCSRV; - _data->env._rpcsrvmanager.addManaged(_data->name, _data->spec.c_str(), *this); + _data->env._rpcsrvmanager.addManaged(_data->name, _data->spec.c_str(), std::move(*this)); return; } else if (_data->_state == RegRpcSrvData::CHK_RPCSRV) { LOG(spam, "phase doAdd(%s,%s)", _data->name.c_str(), _data->spec.c_str()); _data->_state = RegRpcSrvData::XCH_DOADD; - _data->env._exchanger.doAdd(_data->name.c_str(), _data->spec.c_str(), *this); + _data->env._exchanger.doAdd(_data->name.c_str(), _data->spec.c_str(), std::move(*this)); return; } else if (_data->_state == RegRpcSrvData::XCH_DOADD) { LOG(debug, "done doAdd(%s,%s)", _data->name.c_str(), _data->spec.c_str()); @@ -119,8 +126,7 @@ RegRpcSrvCommand::doneHandler(OkState result) LOG_ABORT("should not be reached"); alldone: cleanupReservation(); - delete _data; - _data = nullptr; + _data.reset(); } //----------------------------------------------------------------------------- diff --git a/slobrok/src/vespa/slobrok/server/cmd.h b/slobrok/src/vespa/slobrok/server/cmd.h index 32c26967b01..0034b05a7af 100644 --- a/slobrok/src/vespa/slobrok/server/cmd.h +++ b/slobrok/src/vespa/slobrok/server/cmd.h @@ -2,6 +2,7 @@ #pragma once #include "ok_state.h" +#include class FRT_RPCRequest; @@ -20,25 +21,16 @@ struct RegRpcSrvData; class RegRpcSrvCommand { private: - RegRpcSrvData *_data; - RegRpcSrvCommand(RegRpcSrvData *data) : _data(data) {} + std::unique_ptr _data; + RegRpcSrvCommand(std::unique_ptr data); void cleanupReservation(); public: virtual void doneHandler(OkState result); void doRequest(); - RegRpcSrvCommand(const RegRpcSrvCommand &rhs) - : _data(rhs._data) - { - } - - virtual ~RegRpcSrvCommand() {} - - RegRpcSrvCommand& operator=(const RegRpcSrvCommand &rhs) - { - _data = rhs._data; - return *this; - } + RegRpcSrvCommand(RegRpcSrvCommand &&); + RegRpcSrvCommand & operator=(RegRpcSrvCommand &&); + virtual ~RegRpcSrvCommand(); static RegRpcSrvCommand makeRegRpcSrvCmd(SBEnv &env, const std::string &name, const std::string &spec, FRT_RPCRequest *req); static RegRpcSrvCommand makeRemRemCmd(SBEnv &env, const std::string &name, const std::string &spec); diff --git a/slobrok/src/vespa/slobrok/server/exchange_manager.cpp b/slobrok/src/vespa/slobrok/server/exchange_manager.cpp index 6e14eb073bb..cec01ccbaa2 100644 --- a/slobrok/src/vespa/slobrok/server/exchange_manager.cpp +++ b/slobrok/src/vespa/slobrok/server/exchange_manager.cpp @@ -69,8 +69,8 @@ ExchangeManager::getPartnerList() void ExchangeManager::forwardRemove(const std::string & name, const std::string & spec) { - RegRpcSrvCommand remremhandler = RegRpcSrvCommand::makeRemRemCmd(_env, name, spec); - WorkPackage *package = new WorkPackage(WorkPackage::OP_REMOVE, name, spec, *this, remremhandler); + WorkPackage *package = new WorkPackage(WorkPackage::OP_REMOVE, name, spec, *this, + RegRpcSrvCommand::makeRemRemCmd(_env, name, spec)); for (const auto & entry : _partners) { package->addItem(entry.second.get()); } @@ -80,7 +80,7 @@ ExchangeManager::forwardRemove(const std::string & name, const std::string & spe void ExchangeManager::doAdd(const std::string &name, const std::string &spec, RegRpcSrvCommand rdc) { - WorkPackage *package = new WorkPackage(WorkPackage::OP_DOADD, name, spec, *this, rdc); + WorkPackage *package = new WorkPackage(WorkPackage::OP_DOADD, name, spec, *this, std::move(rdc)); for (const auto & entry : _partners) { package->addItem(entry.second.get()); @@ -92,7 +92,7 @@ ExchangeManager::doAdd(const std::string &name, const std::string &spec, RegRpcS void ExchangeManager::wantAdd(const std::string &name, const std::string &spec, RegRpcSrvCommand rdc) { - WorkPackage *package = new WorkPackage(WorkPackage::OP_WANTADD, name, spec, *this, rdc); + WorkPackage *package = new WorkPackage(WorkPackage::OP_WANTADD, name, spec, *this, std::move(rdc)); for (const auto & entry : _partners) { package->addItem(entry.second.get()); } @@ -167,7 +167,7 @@ ExchangeManager::WorkPackage::WorkPackage(op_type op, const std::string & name, : _work(), _doneCnt(0), _numDenied(0), - _donehandler(donehandler), + _donehandler(std::move(donehandler)), _exchanger(exchanger), _optype(op), _name(name), diff --git a/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp b/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp index 6c337d54f03..e63efd8089a 100644 --- a/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp +++ b/slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp @@ -247,13 +247,12 @@ RpcServerManager::addManaged(const std::string &name, const std::string &spec, R for (size_t i = 0; i < _addManageds.size(); i++) { if (_addManageds[i].rpcsrv == nullptr) { _addManageds[i].rpcsrv = &rpcsrv; - _addManageds[i].handler = rdc; + _addManageds[i].handler = std::move(rdc); rpcsrv.healthCheck(); return; } } - MRSandRRSC pair(&rpcsrv, rdc); - _addManageds.push_back(pair); + _addManageds.emplace_back(&rpcsrv, std::move(rdc)); rpcsrv.healthCheck(); return; } diff --git a/slobrok/src/vespa/slobrok/server/rpc_server_manager.h b/slobrok/src/vespa/slobrok/server/rpc_server_manager.h index ccee7691f55..70ca10e480d 100644 --- a/slobrok/src/vespa/slobrok/server/rpc_server_manager.h +++ b/slobrok/src/vespa/slobrok/server/rpc_server_manager.h @@ -40,20 +40,7 @@ private: ManagedRpcServer *rpcsrv; RegRpcSrvCommand handler; MRSandRRSC(ManagedRpcServer *d, RegRpcSrvCommand h) - : rpcsrv(d), handler(h) {} - - MRSandRRSC(const MRSandRRSC &rhs) - : rpcsrv(rhs.rpcsrv), - handler(rhs.handler) - { - } - - MRSandRRSC& operator=(const MRSandRRSC &rhs) - { - rpcsrv = rhs.rpcsrv; - handler = rhs.handler; - return *this; - } + : rpcsrv(d), handler(std::move(h)) {} }; std::vector _addManageds; std::vector> _deleteList; -- cgit v1.2.3