From f7ab78893c6500132719655cf4878f9a2faf1c19 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Sat, 9 May 2026 12:13:45 +0200 Subject: [PATCH] Don't query inline-symbol frames as native addresses. Frames whose symbol data is shipped inline with the callstack payload (sel=1, e.g. Lua-side stack entries) were being passed to GetCanonicalPointer() in the AddCallstackAllocPayload() query loop, tripping its sel==0 assertion. They have no native pointer to query and were already registered in callstackFrameMap earlier in the same function, so just skip them. Regression from c704f909, which hoisted the per-call-site dedup into QueryCallstackFrame(). Three of the four updated call sites were equivalent before and after, because the old guard and the new one keyed on the same value. The fourth, this one, was not: the old guard tested the frame as-is and matched the entry inserted a few lines above, short-circuiting before GetCanonicalPointer() ran. The new guard keys on PackPointer(addr), so GetCanonicalPointer() must run first to compute addr, and the assert fires. --- server/TracyWorker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index 7ca480c1..ffae2f43 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -4128,7 +4128,7 @@ void Worker::AddCallstackAllocPayload( const char* data ) for( auto& frame : *arr ) { - QueryCallstackFrame( GetCanonicalPointer( frame ) ); + if( frame.sel == 0 ) QueryCallstackFrame( GetCanonicalPointer( frame ) ); } } else