From 941cd803a7e29c5b2d88d0310ae79f2b2c8c1777 Mon Sep 17 00:00:00 2001 From: "Sebastian \"Sebbie\" Silbermann" Date: Tue, 16 Sep 2025 19:17:28 +0200 Subject: [PATCH] [DevTools] Don't keep stale root instances we never mounted around (#34504) --- .../src/backend/fiber/renderer.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/react-devtools-shared/src/backend/fiber/renderer.js b/packages/react-devtools-shared/src/backend/fiber/renderer.js index 37e1c0a87d..22300ec5f7 100644 --- a/packages/react-devtools-shared/src/backend/fiber/renderer.js +++ b/packages/react-devtools-shared/src/backend/fiber/renderer.js @@ -1516,7 +1516,7 @@ export function attach( currentRoot = rootInstance; unmountInstanceRecursively(rootInstance); rootToFiberInstanceMap.delete(root); - flushPendingEvents(root); + flushPendingEvents(); currentRoot = (null: any); }); @@ -1541,7 +1541,7 @@ export function attach( currentRoot = newRoot; setRootPseudoKey(currentRoot.id, root.current); mountFiberRecursively(root.current, false); - flushPendingEvents(root); + flushPendingEvents(); currentRoot = (null: any); }); @@ -2099,7 +2099,7 @@ export function attach( } } - function flushPendingEvents(root: Object): void { + function flushPendingEvents(): void { if (shouldBailoutWithPendingOperations()) { // If we aren't profiling, we can just bail out here. // No use sending an empty update over the bridge. @@ -5349,7 +5349,7 @@ export function attach( mountFiberRecursively(root.current, false); - flushPendingEvents(root); + flushPendingEvents(); needsToFlushComponentLogs = false; currentRoot = (null: any); @@ -5452,6 +5452,9 @@ export function attach( unmountInstanceRecursively(rootInstance); removeRootPseudoKey(currentRoot.id); rootToFiberInstanceMap.delete(root); + } else if (!prevWasMounted && !nextIsMounted) { + // We don't need this root anymore. + rootToFiberInstanceMap.delete(root); } if (isProfiling && isProfilingSupported) { @@ -5475,7 +5478,7 @@ export function attach( } // We're done here. - flushPendingEvents(root); + flushPendingEvents(); needsToFlushComponentLogs = false;