mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
5db35b4d7d
At the point of `FreeEnvironment` and onwards, no JavaScript execution associated with the Environment should be triggered. Avoid draining platform tasks that can trigger JavaScript execution in `FreeEnvironment`. The holder of `node::Environment` should immediately call `node::MultiIsolatePlatform::UnregisterIsolate` and `v8::Isolate::Dispose` to cancel pending foreground tasks and join concurrent tasks after the environment was freed. `NodePlatform` can properly handle the case in `RunForegroundTask` when an Isolate out-lives its associated `node::Environment`. PR-URL: https://github.com/nodejs/node/pull/51290 Fixes: https://github.com/nodejs/node/issues/47748 Fixes: https://github.com/nodejs/node/issues/49344 Reviewed-By: Vinícius Lourenço Claro Cardoso <contact@viniciusl.com.br> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
24 lines
742 B
JavaScript
24 lines
742 B
JavaScript
// Flags: --expose-gc
|
|
'use strict';
|
|
const common = require('../common');
|
|
|
|
// This test verifies that when a V8 FinalizationRegistryCleanupTask is queue
|
|
// at the last moment when JavaScript can be executed, the callback of a
|
|
// FinalizationRegistry will not be invoked and the process should exit
|
|
// normally.
|
|
|
|
const reg = new FinalizationRegistry(
|
|
common.mustNotCall('This FinalizationRegistry callback should never be called'));
|
|
|
|
function register() {
|
|
// Create a temporary object in a new function scope to allow it to be GC-ed.
|
|
reg.register({});
|
|
}
|
|
|
|
process.on('exit', () => {
|
|
// This is the final chance to execute JavaScript.
|
|
register();
|
|
// Queue a FinalizationRegistryCleanupTask by a testing gc request.
|
|
global.gc();
|
|
});
|