diff options
author | Arne Juul <arnej@yahoo-inc.com> | 2018-10-04 07:45:45 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahoo-inc.com> | 2018-10-08 06:04:37 +0000 |
commit | 17c18d170ff16da613bca0dafb940c04e734b1b2 (patch) | |
tree | 602796ba3c9983e22bf6f502279e8a05d2bb1438 /slobrok/src | |
parent | a4792d03ca7b956ccf0ca6c834bc678ba56c89cf (diff) |
RequestDone must still cleanup after Abort
Diffstat (limited to 'slobrok/src')
-rw-r--r-- | slobrok/src/vespa/slobrok/server/exchange_manager.cpp | 12 | ||||
-rw-r--r-- | slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp | 15 |
2 files changed, 17 insertions, 10 deletions
diff --git a/slobrok/src/vespa/slobrok/server/exchange_manager.cpp b/slobrok/src/vespa/slobrok/server/exchange_manager.cpp index e941889ffa3..eb5f1a1f148 100644 --- a/slobrok/src/vespa/slobrok/server/exchange_manager.cpp +++ b/slobrok/src/vespa/slobrok/server/exchange_manager.cpp @@ -120,7 +120,8 @@ ExchangeManager::healthCheck() ExchangeManager::WorkPackage::WorkItem::WorkItem(WorkPackage &pkg, RemoteSlobrok *rem, FRT_RPCRequest *req) - : FNET_Task(pkg._exchanger._env.getScheduler()), _pkg(pkg), _pendingReq(req), _remslob(rem) + : FNET_Task(pkg._exchanger._env.getScheduler()), + _pkg(pkg), _pendingReq(req), _remslob(rem) { } @@ -128,7 +129,13 @@ void ExchangeManager::WorkPackage::WorkItem::RequestDone(FRT_RPCRequest *req) { LOG_ASSERT(req == _pendingReq); - ScheduleNow(); + if (req->GetErrorCode() == FRTE_RPC_ABORT) { + LOG(debug, "WorkItem aborted"); + req->SubRef(); + _pendingReq = nullptr; + } else { + ScheduleNow(); + } } void @@ -164,6 +171,7 @@ ExchangeManager::WorkPackage::WorkItem::~WorkItem() { if (_pendingReq != nullptr) { _pendingReq->Abort(); + // _pendingReq cleared by RequestDone Method LOG_ASSERT(_pendingReq == nullptr); } } diff --git a/slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp b/slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp index b9e8b8d032d..79ed475ae8e 100644 --- a/slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp +++ b/slobrok/src/vespa/slobrok/server/managed_rpc_server.cpp @@ -88,7 +88,13 @@ void ManagedRpcServer::RequestDone(FRT_RPCRequest *req) { LOG_ASSERT(req == _checkServerReq); - ScheduleNow(); + if (req->GetErrorCode() == FRTE_RPC_ABORT) { + LOG(debug, "rpcserver[%s].check aborted", getName().c_str()); + req->SubRef(); + _checkServerReq = nullptr; + } else { + ScheduleNow(); + } } void @@ -97,13 +103,6 @@ ManagedRpcServer::PerformTask() FRT_RPCRequest *req = _checkServerReq; FRT_Values &answer = *(req->GetReturn()); - if (req->GetErrorCode() == FRTE_RPC_ABORT) { - LOG(debug, "rpcserver[%s].check aborted", getName().c_str()); - req->SubRef(); - _checkServerReq = nullptr; - return; - } - if (req->IsError() || strcmp(answer.GetTypeString(), "S") != 0 || ! validateRpcServer(answer[0]._string_array._len, |