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 | |
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.
-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; |