Skip to content

Commit fe1bda9

Browse files
lianxuifyMylesBorins
authored andcommitted
module: fix memory leak when require error occurs
Delete useless module in parent module: parent.children array when error occurs, so that it can be garbage collected. Fixes: #32836 PR-URL: #32837 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Andrey Pechkurov <apechkurov@gmail.com>
1 parent 6681a68 commit fe1bda9

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

lib/internal/modules/cjs/loader.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -928,6 +928,13 @@ Module._load = function(request, parent, isMain) {
928928
delete Module._cache[filename];
929929
if (parent !== undefined) {
930930
delete relativeResolveCache[relResolveCacheIdentifier];
931+
const children = parent && parent.children;
932+
if (ArrayIsArray(children)) {
933+
const index = children.indexOf(module);
934+
if (index !== -1) {
935+
children.splice(index, 1);
936+
}
937+
}
931938
}
932939
} else if (module.exports &&
933940
ObjectGetPrototypeOf(module.exports) ===

test/sequential/test-module-loading.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -302,17 +302,14 @@ assert.throws(
302302
}
303303
},
304304
'fixtures/path.js': {},
305-
'fixtures/throws_error.js': {},
306305
'fixtures/registerExt.test': {},
307306
'fixtures/registerExt.hello.world': {},
308307
'fixtures/registerExt2.test': {},
309308
'fixtures/module-load-order/file1': {},
310309
'fixtures/module-load-order/file2.js': {},
311-
'fixtures/module-load-order/file3.node': {},
312310
'fixtures/module-load-order/file4.reg': {},
313311
'fixtures/module-load-order/file5.reg2': {},
314312
'fixtures/module-load-order/file6/index.js': {},
315-
'fixtures/module-load-order/file7/index.node': {},
316313
'fixtures/module-load-order/file8/index.reg': {},
317314
'fixtures/module-load-order/file9/index.reg2': {},
318315
'fixtures/module-require/parent/index.js': {

0 commit comments

Comments
 (0)