diff options
author | Tor Brede Vekterli <vekterli@yahooinc.com> | 2022-02-25 15:50:56 +0000 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@yahooinc.com> | 2022-02-25 15:50:56 +0000 |
commit | 56e7d9f873421d54c1c6281c860fcdb630dbadbf (patch) | |
tree | 7cceee0ddaaa0cf404a2b3997077cf9582e9daa4 /storage | |
parent | b10a166fe31795debf64644508a84e0c4be45c18 (diff) |
Gracefully flush pending Slobrok task on content node RPC teardown
Avoids race between transport connection destruction in one FNET thread
and processing unregistration task in another FNET thread.
Diffstat (limited to 'storage')
-rw-r--r-- | storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.cpp b/storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.cpp index e1a2dc6b03c..7ad59ee574c 100644 --- a/storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.cpp +++ b/storage/src/vespa/storage/storageserver/rpc/shared_rpc_resources.cpp @@ -110,7 +110,12 @@ void SharedRpcResources::shutdown() { assert(!_shutdown); if (listen_port() > 0) { _slobrok_register->unregisterName(_handle); + // Give slobrok some time to dispatch unregister RPC + while (_slobrok_register->busy()) { + std::this_thread::sleep_for(10ms); + } } + _slobrok_register.reset(); // Implicitly kill any pending slobrok tasks prior to shutting down transport layer _transport->ShutDown(true); // FIXME need to reset to break weak_ptrs? But ShutDown should already sync pending resolves...! _shutdown = true; |