Add a separate method for clearing serial queue.

This commit is contained in:
Bartosz Taudul 2019-08-14 22:39:12 +02:00
parent bccb845908
commit c0b524d8de
2 changed files with 17 additions and 13 deletions

View File

@ -1614,23 +1614,26 @@ void Profiler::ClearQueues( moodycamel::ConsumerToken& token )
for( size_t i=0; i<sz; i++ ) FreeAssociatedMemory( m_itemBuf[i] );
}
ClearSerial();
}
void Profiler::ClearSerial()
{
bool lockHeld = true;
while( !m_serialLock.try_lock() )
{
bool lockHeld = true;
while( !m_serialLock.try_lock() )
if( m_shutdownManual.load( std::memory_order_relaxed ) )
{
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();
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 );
m_serialDequeue.clear();

View File

@ -452,6 +452,7 @@ private:
void CompressWorker();
void ClearQueues( tracy::moodycamel::ConsumerToken& token );
void ClearSerial();
DequeueStatus Dequeue( tracy::moodycamel::ConsumerToken& token );
DequeueStatus DequeueSerial();
bool AppendData( const void* data, size_t len );