mirror of
https://github.com/wolfpld/tracy.git
synced 2025-03-20 07:40:02 +08:00
Use proper pattern for acquiring serial lock.
This fixes a potential hang during crash handling. Also, lock duration is reduced.
This commit is contained in:
parent
4893bca12b
commit
331693d7f1
@ -1222,13 +1222,26 @@ void Profiler::ClearQueues( moodycamel::ConsumerToken& token )
|
|||||||
for( size_t i=0; i<sz; i++ ) FreeAssociatedMemory( m_itemBuf[i] );
|
for( size_t i=0; i<sz; i++ ) FreeAssociatedMemory( m_itemBuf[i] );
|
||||||
}
|
}
|
||||||
|
|
||||||
std::lock_guard<TracyMutex> lock( m_serialLock );
|
{
|
||||||
|
bool lockHeld = true;
|
||||||
|
while( !m_serialLock.try_lock() )
|
||||||
|
{
|
||||||
|
if( m_shutdownManual.load( std::memory_order_relaxed ) )
|
||||||
|
{
|
||||||
|
lockHeld = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for( auto& v : m_serialQueue ) FreeAssociatedMemory( v );
|
||||||
|
m_serialQueue.clear();
|
||||||
|
if( lockHeld )
|
||||||
|
{
|
||||||
|
m_serialLock.unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for( auto& v : m_serialDequeue ) FreeAssociatedMemory( v );
|
for( auto& v : m_serialDequeue ) FreeAssociatedMemory( v );
|
||||||
m_serialDequeue.clear();
|
m_serialDequeue.clear();
|
||||||
|
|
||||||
for( auto& v : m_serialQueue ) FreeAssociatedMemory( v );
|
|
||||||
m_serialQueue.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token )
|
Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token )
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user