mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-09-03 19:25:18 +02:00
FindWriteTagByFlag(flush=false) is only called from FormatMemWriteTagAtNoFlush(), which is itself only called from within FlushPendingMemInfo() - which already holds pendingReadMutex for its entire body. The previous commit added an unconditional lock of that same (non-recursive) mutex here, so any path that reaches a memory write's tag formatting while a flush is in progress double-locks it and hangs/crashes. Repro: PPSSPPHeadless --graphics=software on pspautotests/tests/gpu/clipping/homogeneous.prx reliably hit this. Only take the lock when flush=true (i.e. when we're not already guaranteed to be called from inside FlushPendingMemInfo's locked section), using a defer_lock so the two call sites stay consistent. Verified fixed: 4/4 clean runs of the repro above, plus the full UnitTest suite (49/49) still passes.