From fff1baa904c7e2208a3cdd9de348d4226d60794c Mon Sep 17 00:00:00 2001 From: Rick Hanlon Date: Fri, 31 Mar 2023 21:52:10 -0400 Subject: [PATCH] Failing test for effect unmount issue --- .../src/ReactFiberCommitWork.js | 5 ++ .../react-reconciler/src/ReactFiberHooks.js | 3 ++ .../ReactSuspenseFuzz-test.internal.js | 52 +++++++++++++++++++ 3 files changed, 60 insertions(+) diff --git a/packages/react-reconciler/src/ReactFiberCommitWork.js b/packages/react-reconciler/src/ReactFiberCommitWork.js index 3a12fe9bac700..17bc3508c5d04 100644 --- a/packages/react-reconciler/src/ReactFiberCommitWork.js +++ b/packages/react-reconciler/src/ReactFiberCommitWork.js @@ -358,6 +358,11 @@ function safelyCallDestroy( nearestMountedAncestor: Fiber | null, destroy: () => void, ) { + if (destroy.CALLED) { + throw new Error('CALLED'); + } + destroy.CALLED = true; + try { destroy(); } catch (error) { diff --git a/packages/react-reconciler/src/ReactFiberHooks.js b/packages/react-reconciler/src/ReactFiberHooks.js index 4c05ab5a5ac7b..b49480ffe5fbf 100644 --- a/packages/react-reconciler/src/ReactFiberHooks.js +++ b/packages/react-reconciler/src/ReactFiberHooks.js @@ -1863,6 +1863,9 @@ function pushEffect( destroy: (() => void) | void, deps: Array | void | null, ): Effect { + if (destroy && destroy.CALLED) { + throw new Error('CALLED ' + destroy.NAME); + } const effect: Effect = { tag, create, diff --git a/packages/react-reconciler/src/__tests__/ReactSuspenseFuzz-test.internal.js b/packages/react-reconciler/src/__tests__/ReactSuspenseFuzz-test.internal.js index ce83b244eeba5..5c06dac134232 100644 --- a/packages/react-reconciler/src/__tests__/ReactSuspenseFuzz-test.internal.js +++ b/packages/react-reconciler/src/__tests__/ReactSuspenseFuzz-test.internal.js @@ -445,5 +445,57 @@ Random seed is ${SEED} , ); }); + + it('6', async () => { + const {Text, Container, testResolvedOutput} = createFuzzer(); + try { + await testResolvedOutput( + + + + + + + + , + ); + } catch (e) { + console.log(Scheduler.unstable_clearLog()); + throw e; + } + }); }); });