mirror of
https://github.com/wolfpld/tracy.git
synced 2026-07-24 15:09:15 +00:00
Every Worker-reading Python binding except save_worker() read m_data's zones/plots/threads/etc. without taking Worker::ObtainLockForMainThread(), racing the live receive thread that mutates the same structures. This matches alandtse/tracy#2: crashes only ever hit live instances, never file-loaded ones (no concurrent writer there), and cluster right after a big save_trace when the receive thread is catching up on backlog. Routes every Worker accessor through a new locked() wrapper using the same cooperative lock TracyView.cpp already takes once per frame, so reads can't race live writes without introducing new stalls on the profiled client.