diff options
author | Henning Baldersheim <balder@oath.com> | 2018-09-28 16:35:34 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@oath.com> | 2018-09-28 16:35:34 +0200 |
commit | 89f549f7dd3198095590d019f15c3fec379b7cd6 (patch) | |
tree | 093016fdd2eecfab533a9b4f43745615bda99866 /slobrok | |
parent | ca4a8814bce532aa255dc8810d9b3cf471b8b25a (diff) |
Follow up on PR comments.
Diffstat (limited to 'slobrok')
-rw-r--r-- | slobrok/src/vespa/slobrok/server/cmd.cpp | 28 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/cmd.h | 2 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/exchange_manager.cpp | 2 |
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(); } |