diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index b130ddf5..0f8ac9b6 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -4818,14 +4818,15 @@ void Worker::ProcessCallstackFrame( const QueueCallstackFrame& ev ) { const auto idx = m_callstackFrameStaging->size - m_pendingCallstackSubframes; - m_callstackFrameStaging->data[idx].name = StringIdx( nit->second.idx ); + const auto name = StringIdx( nit->second.idx ); + m_callstackFrameStaging->data[idx].name = name; m_callstackFrameStaging->data[idx].file = StringIdx( fit->second.idx ); m_callstackFrameStaging->data[idx].line = ev.line; m_callstackFrameStaging->data[idx].symAddr = ev.symAddr; if( ev.symAddr != 0 && m_data.symbolMap.find( ev.symAddr ) == m_data.symbolMap.end() && m_pendingSymbols.find( ev.symAddr ) == m_pendingSymbols.end() ) { - m_pendingSymbols.emplace( ev.symAddr, m_callstackFrameStaging->imageName ); + m_pendingSymbols.emplace( ev.symAddr, SymbolPending { name, m_callstackFrameStaging->imageName } ); Query( ServerQuerySymbol, ev.symAddr ); } @@ -4856,10 +4857,10 @@ void Worker::ProcessSymbolInformation( const QueueCallstackFrame& ev ) assert( fit != m_pendingCustomStrings.end() ); SymbolData sd; - sd.name = StringIdx( nit->second.idx ); + sd.name = it->second.name; sd.file = StringIdx( fit->second.idx ); sd.line = ev.line; - sd.imageName = it->second; + sd.imageName = it->second.imageName; m_data.symbolMap.emplace( ev.symAddr, std::move( sd ) ); m_pendingSymbols.erase( it ); diff --git a/server/TracyWorker.hpp b/server/TracyWorker.hpp index 244225e3..a3be43a9 100644 --- a/server/TracyWorker.hpp +++ b/server/TracyWorker.hpp @@ -175,6 +175,12 @@ private: } }; + struct SymbolPending + { + StringIdx name; + StringIdx imageName; + }; + struct DataBlock { std::shared_mutex lock; @@ -704,7 +710,7 @@ private: unordered_flat_map m_threadMap; unordered_flat_map m_nextCallstack; unordered_flat_map m_pendingFrameImageData; - unordered_flat_map m_pendingSymbols; + unordered_flat_map m_pendingSymbols; uint32_t m_pendingStrings; uint32_t m_pendingThreads;