From b4178af81b02dfa0e898670ce564c4649fd8947f Mon Sep 17 00:00:00 2001 From: Paul Shen Date: Wed, 17 Jul 2019 17:21:19 -0700 Subject: [PATCH] clean up nextEffect pointers (#16115) --- .../react-reconciler/src/ReactFiberWorkLoop.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/react-reconciler/src/ReactFiberWorkLoop.js b/packages/react-reconciler/src/ReactFiberWorkLoop.js index 1c291d0b87..510f31c2b5 100644 --- a/packages/react-reconciler/src/ReactFiberWorkLoop.js +++ b/packages/react-reconciler/src/ReactFiberWorkLoop.js @@ -1712,6 +1712,16 @@ function commitRootImpl(root) { rootDoesHavePassiveEffects = false; rootWithPendingPassiveEffects = root; pendingPassiveEffectsExpirationTime = expirationTime; + } else { + // We are done with the effect chain at this point so let's clear the + // nextEffect pointers to assist with GC. If we have passive effects, we'll + // clear this in flushPassiveEffects. + nextEffect = firstEffect; + while (nextEffect !== null) { + const nextNextEffect = nextEffect.nextEffect; + nextEffect.nextEffect = null; + nextEffect = nextNextEffect; + } } // Check if there's remaining work on this root @@ -1947,7 +1957,10 @@ export function flushPassiveEffects() { captureCommitPhaseError(effect, error); } } - effect = effect.nextEffect; + const nextNextEffect = effect.nextEffect; + // Remove nextEffect pointer to assist GC + effect.nextEffect = null; + effect = nextNextEffect; } if (enableSchedulerTracing) {