Skip to content

Commit

Permalink
Add an early invariant to debug a mystery crash (#18159)
Browse files Browse the repository at this point in the history
  • Loading branch information
gaearon committed Feb 28, 2020
1 parent 7ea4e41 commit 4ee592e
Show file tree
Hide file tree
Showing 10 changed files with 40 additions and 0 deletions.
13 changes: 13 additions & 0 deletions packages/react-reconciler/src/ReactFiber.js
Expand Up @@ -34,6 +34,7 @@ import {
enableUserTimingAPI,
enableScopeAPI,
enableBlocksAPI,
throwEarlyForMysteriousError,
} from 'shared/ReactFeatureFlags';
import {NoEffect, Placement} from 'shared/ReactSideEffectTags';
import {ConcurrentRoot, BlockingRoot} from 'shared/ReactRootTags';
Expand Down Expand Up @@ -453,6 +454,18 @@ export function createWorkInProgress(current: Fiber, pendingProps: any): Fiber {
}
}

if (throwEarlyForMysteriousError) {
// Trying to debug a mysterious internal-only production failure.
// See D20130868 and t62461245.
// This is only on for RN FB builds.
if (current == null) {
throw Error('current is ' + current + " but it can't be");
}
if (workInProgress == null) {
throw Error('workInProgress is ' + workInProgress + " but it can't be");
}
}

workInProgress.childExpirationTime = current.childExpirationTime;
workInProgress.expirationTime = current.expirationTime;

Expand Down
3 changes: 3 additions & 0 deletions packages/shared/ReactFeatureFlags.js
Expand Up @@ -105,6 +105,9 @@ export const deferPassiveEffectCleanupDuringUnmount = false;
// a deprecated pattern we want to get rid of in the future
export const warnAboutSpreadingKeyToJSX = false;

// Internal-only attempt to debug a React Native issue. See D20130868.
export const throwEarlyForMysteriousError = false;

// --------------------------
// Future APIs to be deprecated
// --------------------------
Expand Down
3 changes: 3 additions & 0 deletions packages/shared/forks/ReactFeatureFlags.native-fb.js
Expand Up @@ -50,6 +50,9 @@ export const runAllPassiveEffectDestroysBeforeCreates = false;
export const enableModernEventSystem = false;
export const warnAboutSpreadingKeyToJSX = false;

// Internal-only attempt to debug a React Native issue. See D20130868.
export const throwEarlyForMysteriousError = true;

// Only used in www builds.
export function addUserTimingListener() {
invariant(false, 'Not implemented.');
Expand Down
3 changes: 3 additions & 0 deletions packages/shared/forks/ReactFeatureFlags.native-oss.js
Expand Up @@ -45,6 +45,9 @@ export const runAllPassiveEffectDestroysBeforeCreates = false;
export const enableModernEventSystem = false;
export const warnAboutSpreadingKeyToJSX = false;

// Internal-only attempt to debug a React Native issue. See D20130868.
export const throwEarlyForMysteriousError = false;

// Only used in www builds.
export function addUserTimingListener() {
invariant(false, 'Not implemented.');
Expand Down
3 changes: 3 additions & 0 deletions packages/shared/forks/ReactFeatureFlags.persistent.js
Expand Up @@ -45,6 +45,9 @@ export const runAllPassiveEffectDestroysBeforeCreates = false;
export const enableModernEventSystem = false;
export const warnAboutSpreadingKeyToJSX = false;

// Internal-only attempt to debug a React Native issue. See D20130868.
export const throwEarlyForMysteriousError = false;

// Only used in www builds.
export function addUserTimingListener() {
invariant(false, 'Not implemented.');
Expand Down
3 changes: 3 additions & 0 deletions packages/shared/forks/ReactFeatureFlags.test-renderer.js
Expand Up @@ -45,6 +45,9 @@ export const runAllPassiveEffectDestroysBeforeCreates = false;
export const enableModernEventSystem = false;
export const warnAboutSpreadingKeyToJSX = false;

// Internal-only attempt to debug a React Native issue. See D20130868.
export const throwEarlyForMysteriousError = false;

// Only used in www builds.
export function addUserTimingListener() {
invariant(false, 'Not implemented.');
Expand Down
3 changes: 3 additions & 0 deletions packages/shared/forks/ReactFeatureFlags.test-renderer.www.js
Expand Up @@ -45,6 +45,9 @@ export const runAllPassiveEffectDestroysBeforeCreates = false;
export const enableModernEventSystem = false;
export const warnAboutSpreadingKeyToJSX = false;

// Internal-only attempt to debug a React Native issue. See D20130868.
export const throwEarlyForMysteriousError = false;

// Only used in www builds.
export function addUserTimingListener() {
invariant(false, 'Not implemented.');
Expand Down
3 changes: 3 additions & 0 deletions packages/shared/forks/ReactFeatureFlags.testing.js
Expand Up @@ -45,6 +45,9 @@ export const runAllPassiveEffectDestroysBeforeCreates = false;
export const enableModernEventSystem = false;
export const warnAboutSpreadingKeyToJSX = false;

// Internal-only attempt to debug a React Native issue. See D20130868.
export const throwEarlyForMysteriousError = false;

// Only used in www builds.
export function addUserTimingListener() {
invariant(false, 'Not implemented.');
Expand Down
3 changes: 3 additions & 0 deletions packages/shared/forks/ReactFeatureFlags.testing.www.js
Expand Up @@ -45,6 +45,9 @@ export const runAllPassiveEffectDestroysBeforeCreates = false;
export const enableModernEventSystem = false;
export const warnAboutSpreadingKeyToJSX = false;

// Internal-only attempt to debug a React Native issue. See D20130868.
export const throwEarlyForMysteriousError = false;

// Only used in www builds.
export function addUserTimingListener() {
invariant(false, 'Not implemented.');
Expand Down
3 changes: 3 additions & 0 deletions packages/shared/forks/ReactFeatureFlags.www.js
Expand Up @@ -99,6 +99,9 @@ export const warnUnstableRenderSubtreeIntoContainer = false;

export const enableModernEventSystem = false;

// Internal-only attempt to debug a React Native issue. See D20130868.
export const throwEarlyForMysteriousError = false;

// Flow magic to verify the exports of this file match the original version.
// eslint-disable-next-line no-unused-vars
type Check<_X, Y: _X, X: Y = _X> = null;
Expand Down

0 comments on commit 4ee592e

Please sign in to comment.