mirror of https://github.com/nodejs/node.git
46 lines
1.4 KiB
JavaScript
46 lines
1.4 KiB
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
|
|
const { Worker } = require('worker_threads');
|
|
const { createHook } = require('async_hooks');
|
|
const { deepStrictEqual, strictEqual } = require('assert');
|
|
|
|
const m = new Map();
|
|
createHook({
|
|
init(asyncId, type, triggerAsyncId, resource) {
|
|
if (['WORKER', 'MESSAGEPORT'].includes(type)) {
|
|
m.set(asyncId, { type, resource });
|
|
}
|
|
},
|
|
destroy(asyncId) {
|
|
m.delete(asyncId);
|
|
}
|
|
}).enable();
|
|
|
|
function getActiveWorkerAndMessagePortTypes() {
|
|
const activeWorkerAndMessagePortTypes = [];
|
|
for (const asyncId of m.keys()) {
|
|
const { type, resource } = m.get(asyncId);
|
|
// Same logic as https://github.com/mafintosh/why-is-node-running/blob/24fb4c878753390a05d00959e6173d0d3c31fddd/index.js#L31-L32.
|
|
if (typeof resource.hasRef !== 'function' || resource.hasRef() === true) {
|
|
activeWorkerAndMessagePortTypes.push(type);
|
|
}
|
|
}
|
|
return activeWorkerAndMessagePortTypes;
|
|
}
|
|
|
|
const w = new Worker('', { eval: true });
|
|
deepStrictEqual(getActiveWorkerAndMessagePortTypes(), ['WORKER']);
|
|
w.unref();
|
|
deepStrictEqual(getActiveWorkerAndMessagePortTypes(), []);
|
|
w.ref();
|
|
deepStrictEqual(getActiveWorkerAndMessagePortTypes(), ['WORKER', 'MESSAGEPORT']);
|
|
|
|
w.on('exit', common.mustCall((exitCode) => {
|
|
strictEqual(exitCode, 0);
|
|
deepStrictEqual(getActiveWorkerAndMessagePortTypes(), ['WORKER']);
|
|
setTimeout(common.mustCall(() => {
|
|
deepStrictEqual(getActiveWorkerAndMessagePortTypes(), []);
|
|
}), 0);
|
|
}));
|