summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@oath.com>2018-09-28 16:35:34 +0200
committerHenning Baldersheim <balder@oath.com>2018-09-28 16:35:34 +0200
commit89f549f7dd3198095590d019f15c3fec379b7cd6 (patch)
tree093016fdd2eecfab533a9b4f43745615bda99866
parentca4a8814bce532aa255dc8810d9b3cf471b8b25a (diff)
Follow up on PR comments.
-rw-r--r--slobrok/src/vespa/slobrok/server/cmd.cpp28
-rw-r--r--slobrok/src/vespa/slobrok/server/cmd.h2
-rw-r--r--slobrok/src/vespa/slobrok/server/exchange_manager.cpp2
3 files changed, 15 insertions, 17 deletions
diff --git a/slobrok/src/vespa/slobrok/server/cmd.cpp b/slobrok/src/vespa/slobrok/server/cmd.cpp
index 292f05bdec1..e728c8f80ad 100644
--- a/slobrok/src/vespa/slobrok/server/cmd.cpp
+++ b/slobrok/src/vespa/slobrok/server/cmd.cpp
@@ -68,12 +68,12 @@ RegRpcSrvCommand::doRequest()
}
void
-RegRpcSrvCommand::cleanupReservation()
+RegRpcSrvCommand::cleanupReservation(RegRpcSrvData & data)
{
- RpcServerMap &map = _data->env._rpcsrvmap;
- const ReservedName *rsvp = map.getReservation(_data->name.c_str());
+ RpcServerMap &map = data.env._rpcsrvmap;
+ const ReservedName *rsvp = map.getReservation(data.name.c_str());
if (rsvp != nullptr && rsvp->isLocal) {
- map.removeReservation(_data->name.c_str());
+ map.removeReservation(data.name.c_str());
}
}
@@ -81,10 +81,11 @@ void
RegRpcSrvCommand::doneHandler(OkState result)
{
LOG_ASSERT(_data != nullptr);
- RegRpcSrvData & data = *_data;
+ std::unique_ptr<RegRpcSrvData> dataUP = std::move(_data);
+ RegRpcSrvData & data = *dataUP;
if (result.failed()) {
LOG(warning, "failed in state %d: %s", data._state, result.errorMsg.c_str());
- cleanupReservation();
+ cleanupReservation(data);
// XXX should handle different state errors differently?
if (data.registerRequest != nullptr) {
data.registerRequest->SetError(FRTE_RPC_METHOD_FAILED, result.errorMsg.c_str());
@@ -95,21 +96,19 @@ RegRpcSrvCommand::doneHandler(OkState result)
goto alldone;
}
if (data._state == RegRpcSrvData::RDC_INIT) {
- LOG(spam, "phase wantAdd(%s,%s)",
- data.name.c_str(), data.spec.c_str());
+ 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(), std::move(*this));
+ data.env._exchanger.wantAdd(data.name.c_str(), data.spec.c_str(), std::move(dataUP));
return;
} else if (data._state == RegRpcSrvData::XCH_WANTADD) {
- LOG(spam, "phase addManaged(%s,%s)",
- data.name.c_str(), data.spec.c_str());
+ 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(), std::move(*this));
+ data.env._rpcsrvmanager.addManaged(data.name, data.spec.c_str(), std::move(dataUP));
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(), std::move(*this));
+ data.env._exchanger.doAdd(data.name.c_str(), data.spec.c_str(), std::move(dataUP));
return;
} else if (data._state == RegRpcSrvData::XCH_DOADD) {
LOG(debug, "done doAdd(%s,%s)", data.name.c_str(), data.spec.c_str());
@@ -123,8 +122,7 @@ RegRpcSrvCommand::doneHandler(OkState result)
// no other state should be possible
LOG_ABORT("should not be reached");
alldone:
- cleanupReservation();
- _data.reset();
+ cleanupReservation(data);
}
//-----------------------------------------------------------------------------
diff --git a/slobrok/src/vespa/slobrok/server/cmd.h b/slobrok/src/vespa/slobrok/server/cmd.h
index 0034b05a7af..07b3d3ee0ba 100644
--- a/slobrok/src/vespa/slobrok/server/cmd.h
+++ b/slobrok/src/vespa/slobrok/server/cmd.h
@@ -22,8 +22,8 @@ class RegRpcSrvCommand
{
private:
std::unique_ptr<RegRpcSrvData> _data;
+ static void cleanupReservation(RegRpcSrvData &);
RegRpcSrvCommand(std::unique_ptr<RegRpcSrvData> data);
- void cleanupReservation();
public:
virtual void doneHandler(OkState result);
void doRequest();
diff --git a/slobrok/src/vespa/slobrok/server/exchange_manager.cpp b/slobrok/src/vespa/slobrok/server/exchange_manager.cpp
index cec01ccbaa2..e74724803e8 100644
--- a/slobrok/src/vespa/slobrok/server/exchange_manager.cpp
+++ b/slobrok/src/vespa/slobrok/server/exchange_manager.cpp
@@ -41,7 +41,7 @@ ExchangeManager::addPartner(const std::string & name, const std::string & spec)
LOG_ASSERT(_partners.find(name) == _partners.end());
auto newPartner = std::make_unique<RemoteSlobrok>(name, spec, *this);
RemoteSlobrok & partner = *newPartner;
- _partners[name] = std::move(newPartner);
+ _partners.emplace(name, std::move(newPartner));
partner.tryConnect();
return OkState();
}