You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

38 lines
818 B

'use strict';
const common = require('../common');
const async_wrap = process.binding('async_wrap');
const assert = require('assert');
const async_hooks = require('async_hooks');
const RUNS = 5;
let test_id = null;
let run_cntr = 0;
let hooks = null;
process.on('beforeExit', common.mustCall(() => {
process.removeAllListeners('uncaughtException');
hooks.disable();
assert.strictEqual(test_id, null);
assert.strictEqual(run_cntr, RUNS);
}));
hooks = async_hooks.createHook({
destroy(id) {
if (id === test_id) {
run_cntr++;
test_id = null;
}
},
}).enable();
(function runner(n) {
assert.strictEqual(test_id, null);
if (n <= 0) return;
test_id = (Math.random() * 1e9) >>> 0;
async_wrap.addIdToDestroyList(test_id);
setImmediate(common.mustCall(runner), n - 1);
})(RUNS);