mirror of
https://github.com/nodejs/node.git
synced 2025-04-29 06:19:07 +00:00

Test that an napi_ref can be nested inside another ObjectWrap. The test shows a critical case where a finalizer deletes an `napi_ref` whose finalizer is also scheduled. PR-URL: https://github.com/nodejs/node/pull/57981 Reviewed-By: Vladimir Morozov <vmorozov@microsoft.com> Reviewed-By: Michael Dawson <midawson@redhat.com>
25 lines
623 B
JavaScript
25 lines
623 B
JavaScript
// Flags: --expose-gc
|
|
|
|
'use strict';
|
|
const common = require('../../common');
|
|
const assert = require('assert');
|
|
const addon = require(`./build/${common.buildType}/myobject_basic_finalizer`);
|
|
|
|
// This test verifies that ObjectWrap can be correctly finalized with a node_api_basic_finalizer
|
|
// in the current JS loop tick
|
|
(() => {
|
|
let obj = new addon.MyObject(9);
|
|
obj = null;
|
|
// Silent eslint about unused variables.
|
|
assert.strictEqual(obj, null);
|
|
})();
|
|
|
|
for (let i = 0; i < 10; ++i) {
|
|
global.gc();
|
|
if (addon.getFinalizerCallCount() === 1) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
assert.strictEqual(addon.getFinalizerCallCount(), 1);
|