summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@oath.com>2018-09-28 13:08:14 +0200
committerHenning Baldersheim <balder@oath.com>2018-09-28 13:08:14 +0200
commit24941eb128471889a4482dd7b213fadc3cc1b5b8 (patch)
treeffd1132b7d02d94b1f762ab6d3ef4baa2dc2d1ab
parente13b1f967395bd2889c3d9b4116f0c0e3a8f2e00 (diff)
Use std::unique_ptr
-rw-r--r--slobrok/src/vespa/slobrok/server/cmd.cpp24
-rw-r--r--slobrok/src/vespa/slobrok/server/cmd.h20
-rw-r--r--slobrok/src/vespa/slobrok/server/exchange_manager.cpp10
-rw-r--r--slobrok/src/vespa/slobrok/server/rpc_server_manager.cpp5
-rw-r--r--slobrok/src/vespa/slobrok/server/rpc_server_manager.h15
5 files changed, 29 insertions, 45 deletions
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<RegRpcSrvData> 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<RegRpcSrvData>(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<RegRpcSrvData>(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 <memory>
class FRT_RPCRequest;
@@ -20,25 +21,16 @@ struct RegRpcSrvData;
class RegRpcSrvCommand
{
private:
- RegRpcSrvData *_data;
- RegRpcSrvCommand(RegRpcSrvData *data) : _data(data) {}
+ std::unique_ptr<RegRpcSrvData> _data;
+ RegRpcSrvCommand(std::unique_ptr<RegRpcSrvData> 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<MRSandRRSC> _addManageds;
std::vector<std::unique_ptr<ManagedRpcServer>> _deleteList;