From 3a561b4eed1ea7cae08ea454cf1cb7f28c529a84 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Sun, 2 Jun 2019 13:15:55 +0200 Subject: [PATCH] Save thread state should be atomic. --- server/TracyView.cpp | 14 +++++++------- server/TracyView.hpp | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/server/TracyView.cpp b/server/TracyView.cpp index c3be2b76..f7a37c5e 100644 --- a/server/TracyView.cpp +++ b/server/TracyView.cpp @@ -693,10 +693,10 @@ bool View::DrawImpl() return !wasCancelled; } - if( m_saveThreadState == SaveThreadState::NeedsJoin ) + if( m_saveThreadState.load( std::memory_order_relaxed ) == SaveThreadState::NeedsJoin ) { m_saveThread.join(); - m_saveThreadState = SaveThreadState::Inert; + m_saveThreadState.store( SaveThreadState::Inert, std::memory_order_relaxed ); } const auto& io = ImGui::GetIO(); @@ -910,7 +910,7 @@ bool View::DrawImpl() #else ImGui::Text( "View span: %-10s Time span: %-10s ", TimeToString( m_zvEnd - m_zvStart ), TimeToString( m_worker.GetLastTime() - m_worker.GetTimeBegin() ) ); #endif - if( m_saveThreadState == SaveThreadState::Saving ) + if( m_saveThreadState.load( std::memory_order_relaxed ) == SaveThreadState::Saving ) { ImGui::SameLine(); #ifdef TRACY_EXTENDED_FONT @@ -1023,9 +1023,9 @@ bool View::DrawConnection() } #ifdef TRACY_EXTENDED_FONT - if( ImGui::Button( ICON_FA_SAVE " Save trace" ) && m_saveThreadState == SaveThreadState::Inert ) + if( ImGui::Button( ICON_FA_SAVE " Save trace" ) && m_saveThreadState.load( std::memory_order_relaxed ) == SaveThreadState::Inert ) #else - if( ImGui::Button( "Save trace" ) && m_saveThreadState == SaveThreadState::Inert ) + if( ImGui::Button( "Save trace" ) && m_saveThreadState.load( std::memory_order_relaxed ) == SaveThreadState::Inert ) #endif { #ifdef TRACY_FILESELECTOR @@ -1050,11 +1050,11 @@ bool View::DrawConnection() } if( f ) { - m_saveThreadState = SaveThreadState::Saving; + m_saveThreadState.store( SaveThreadState::Saving, std::memory_order_relaxed ); m_saveThread = std::thread( [this, f{std::move( f )}] { std::shared_lock lock( m_worker.GetDataLock() ); m_worker.Write( *f ); - m_saveThreadState = SaveThreadState::NeedsJoin; + m_saveThreadState.store( SaveThreadState::NeedsJoin, std::memory_order_relaxed ); } ); } } diff --git a/server/TracyView.hpp b/server/TracyView.hpp index bd605393..f0dc03e1 100644 --- a/server/TracyView.hpp +++ b/server/TracyView.hpp @@ -323,7 +323,7 @@ private: NeedsJoin }; - SaveThreadState m_saveThreadState = SaveThreadState::Inert; + std::atomic m_saveThreadState { SaveThreadState::Inert }; std::thread m_saveThread; struct FindZone {