mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 21:19:50 +01:00
518d2b6e5a
PR-URL: https://github.com/nodejs/node/pull/26800 Reviewed-By: Anto Aravinth <anto.aravinth.cse@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Yongsheng Zhang <zyszys98@gmail.com>
38 lines
990 B
JavaScript
38 lines
990 B
JavaScript
'use strict';
|
|
// Test that async ids that are added to the destroy queue while running a
|
|
// `destroy` callback are handled correctly.
|
|
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const async_hooks = require('async_hooks');
|
|
|
|
const initCalls = new Set();
|
|
let destroyResCallCount = 0;
|
|
let res2;
|
|
|
|
async_hooks.createHook({
|
|
init: common.mustCallAtLeast((id, provider) => {
|
|
if (provider === 'foobar')
|
|
initCalls.add(id);
|
|
}, 2),
|
|
destroy: common.mustCallAtLeast((id) => {
|
|
if (!initCalls.has(id)) return;
|
|
|
|
switch (destroyResCallCount++) {
|
|
case 0:
|
|
// Trigger the second `destroy` call.
|
|
res2.emitDestroy();
|
|
break;
|
|
case 2:
|
|
assert.fail('More than 2 destroy() invocations');
|
|
break;
|
|
}
|
|
}, 2)
|
|
}).enable();
|
|
|
|
const res1 = new async_hooks.AsyncResource('foobar');
|
|
res2 = new async_hooks.AsyncResource('foobar');
|
|
res1.emitDestroy();
|
|
|
|
process.on('exit', () => assert.strictEqual(destroyResCallCount, 2));
|