Guard poll() against a mode-apply mid-flight; two doc corrections
Extends the OnTimer guard to skip session.poll() itself while modeApplyInProgress(), preventing an undo/redo or project-switch reload from replacing the view model under an in-flight applyMode.
This commit is contained in:
+7
-1
@@ -180,7 +180,13 @@ static void OnTimer()
|
||||
// the idle fast-path is a SINGLE POINTER TEST — drive only when a capture is live.
|
||||
if (capture::g_rtCapture) capture::DriveRealtimeCapture(g_session);
|
||||
|
||||
g_session.poll();
|
||||
// poll()'s undo/redo-reload and project-switch Load branches call
|
||||
// loadFromProject, replacing g_session.view() wholesale — deferred here while
|
||||
// an applyMode is on the stack (reachable if a pumped message loop re-enters
|
||||
// this timer mid-apply), same retry-next-tick shape as the consume guard below.
|
||||
// Deferred WHOLE, not just the reload branches: poll()'s identity tracking is
|
||||
// cheap to skip for one tick and resumes correctly, unlatched, on the next.
|
||||
if (!reasampler::modeApplyInProgress()) g_session.poll();
|
||||
|
||||
// persist stays MODEL-ONLY (loads the saved view model but does not apply
|
||||
// visibility, to avoid coupling persist to the view shell); poll() raises a
|
||||
|
||||
Reference in New Issue
Block a user