From 30335d9588c1ae5bb1cbd973b0d378ac1c445539 Mon Sep 17 00:00:00 2001 From: biplavbarua Date: Sat, 3 Jan 2026 01:03:09 +0530 Subject: [PATCH] Fix: Guard against re-entry in Scheduler (Issue #17355) Adds a check for isPerformingWork inside performWorkUntilDeadline. This prevents recursive execution of the work loop when the browser environment (e.g., Firefox) fires message events while the JavaScript main thread is paused by a breakpoint or alert. --- packages/scheduler/src/forks/Scheduler.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/scheduler/src/forks/Scheduler.js b/packages/scheduler/src/forks/Scheduler.js index 88239b71067..f25ae19dde0 100644 --- a/packages/scheduler/src/forks/Scheduler.js +++ b/packages/scheduler/src/forks/Scheduler.js @@ -500,6 +500,14 @@ const performWorkUntilDeadline = () => { // remain true, and we'll continue the work loop. let hasMoreWork = true; try { + if (isPerformingWork) { + // A scheduled task triggered a host event (e.g. valid re-entry). + // If we process it now, we'll lose key context. Schedulers that + // support re-entry should verify that the queue is empty before + // processing. + // For now, we'll just yield. + return; + } hasMoreWork = flushWork(currentTime); } finally { if (hasMoreWork) {