Skip to content

Commit 65b9ad9

Browse files
authored
Fix context memory leak (#10680)
* Fix context memory leak * Fix Flow
1 parent 43dae74 commit 65b9ad9

File tree

3 files changed

+16
-6
lines changed

3 files changed

+16
-6
lines changed

src/renderers/shared/fiber/ReactFiberBeginWork.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ module.exports = function<T, P, I, TI, PI, C, CX, PL>(
305305
return workInProgress.child;
306306
}
307307

308-
function updateHostRoot(current, workInProgress, priorityLevel) {
308+
function pushHostRootContext(workInProgress) {
309309
const root = (workInProgress.stateNode: FiberRoot);
310310
if (root.pendingContext) {
311311
pushTopLevelContextObject(
@@ -317,9 +317,11 @@ module.exports = function<T, P, I, TI, PI, C, CX, PL>(
317317
// Should always be set
318318
pushTopLevelContextObject(workInProgress, root.context, false);
319319
}
320-
321320
pushHostContainer(workInProgress, root.containerInfo);
321+
}
322322

323+
function updateHostRoot(current, workInProgress, priorityLevel) {
324+
pushHostRootContext(workInProgress);
323325
const updateQueue = workInProgress.updateQueue;
324326
if (updateQueue !== null) {
325327
const prevState = workInProgress.memoizedState;
@@ -777,8 +779,7 @@ module.exports = function<T, P, I, TI, PI, C, CX, PL>(
777779
pushContextProvider(workInProgress);
778780
break;
779781
case HostRoot:
780-
const root: FiberRoot = workInProgress.stateNode;
781-
pushHostContainer(workInProgress, root.containerInfo);
782+
pushHostRootContext(workInProgress);
782783
break;
783784
default:
784785
invariant(

src/renderers/shared/fiber/ReactFiberCompleteWork.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ import type {FiberRoot} from 'ReactFiberRoot';
2121
import type {HostConfig} from 'ReactFiberReconciler';
2222

2323
var {reconcileChildFibers} = require('ReactChildFiber');
24-
var {popContextProvider} = require('ReactFiberContext');
24+
var {
25+
popContextProvider,
26+
popTopLevelContextObject,
27+
} = require('ReactFiberContext');
2528
var ReactTypeOfWork = require('ReactTypeOfWork');
2629
var ReactTypeOfSideEffect = require('ReactTypeOfSideEffect');
2730
var ReactPriorityLevel = require('ReactPriorityLevel');
@@ -211,7 +214,8 @@ module.exports = function<T, P, I, TI, PI, C, CX, PL>(
211214
return null;
212215
}
213216
case HostRoot: {
214-
// TODO: Pop the host container after #8607 lands.
217+
popHostContainer(workInProgress);
218+
popTopLevelContextObject(workInProgress);
215219
const fiberRoot = (workInProgress.stateNode: FiberRoot);
216220
if (fiberRoot.pendingContext) {
217221
fiberRoot.context = fiberRoot.pendingContext;

src/renderers/shared/fiber/ReactFiberContext.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,11 @@ function popContextProvider(fiber: Fiber): void {
135135
}
136136
exports.popContextProvider = popContextProvider;
137137

138+
exports.popTopLevelContextObject = function(fiber: Fiber) {
139+
pop(didPerformWorkStackCursor, fiber);
140+
pop(contextStackCursor, fiber);
141+
};
142+
138143
exports.pushTopLevelContextObject = function(
139144
fiber: Fiber,
140145
context: Object,

0 commit comments

Comments
 (0)