diff options
author | Tor Brede Vekterli <vekterli@yahooinc.com> | 2022-02-17 12:45:53 +0000 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@yahooinc.com> | 2022-02-18 15:38:33 +0000 |
commit | 0c645c88164bc29c64aaa1861b73aaaae443e075 (patch) | |
tree | f84c1dcf59b22624f94677ca2adcab8e5432e529 /fnet | |
parent | a0806ea0ee6941e31538033bfb2bc6c8421beddb (diff) |
Make finished-polling outside of lock thread safe
Diffstat (limited to 'fnet')
-rw-r--r-- | fnet/src/vespa/fnet/transport_thread.cpp | 10 | ||||
-rw-r--r-- | fnet/src/vespa/fnet/transport_thread.h | 6 |
2 files changed, 10 insertions, 6 deletions
diff --git a/fnet/src/vespa/fnet/transport_thread.cpp b/fnet/src/vespa/fnet/transport_thread.cpp index 53f8fea40cd..1d55ac3b327 100644 --- a/fnet/src/vespa/fnet/transport_thread.cpp +++ b/fnet/src/vespa/fnet/transport_thread.cpp @@ -236,7 +236,7 @@ FNET_TransportThread::~FNET_TransportThread() { std::lock_guard<std::mutex> guard(_shutdownLock); } - if (_started.load() && !_finished) { + if (_started.load() && !is_finished()) { LOG(error, "Transport: delete called on active object!"); } else { std::lock_guard guard(_pseudo_thread); @@ -380,11 +380,11 @@ FNET_TransportThread::ShutDown(bool waitFinished) void FNET_TransportThread::WaitFinished() { - if (_finished) + if (is_finished()) return; std::unique_lock<std::mutex> guard(_shutdownLock); - while (!_finished) + while (!is_finished()) _shutdownCond.wait(guard); } @@ -501,7 +501,7 @@ FNET_TransportThread::EventLoopIteration() { if (!IsShutDown()) return true; - if (_finished) + if (is_finished()) return false; endEventLoop(); @@ -557,7 +557,7 @@ FNET_TransportThread::endEventLoop() { { std::lock_guard<std::mutex> guard(_shutdownLock); - _finished = true; + _finished.store(true, std::memory_order_relaxed); _shutdownCond.notify_all(); } diff --git a/fnet/src/vespa/fnet/transport_thread.h b/fnet/src/vespa/fnet/transport_thread.h index cf1f68a8b39..dfdcf4e1970 100644 --- a/fnet/src/vespa/fnet/transport_thread.h +++ b/fnet/src/vespa/fnet/transport_thread.h @@ -50,7 +50,7 @@ private: std::recursive_mutex _pseudo_thread; // used after transport thread has shut down std::atomic<bool> _started; // event loop started ? std::atomic<bool> _shutdown; // should stop event loop ? - bool _finished; // event loop stopped ? + std::atomic<bool> _finished; // event loop stopped ? /** * Add an IOComponent to the list of components. This operation is @@ -173,6 +173,10 @@ private: return _shutdown.load(std::memory_order_relaxed); } + [[nodiscard]] bool is_finished() const noexcept { + return _finished.load(std::memory_order_relaxed); + } + public: FNET_TransportThread(const FNET_TransportThread &) = delete; FNET_TransportThread &operator=(const FNET_TransportThread &) = delete; |