mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
1b8d1794cf
This should help projects like https://github.com/mafintosh/why-is-node-running and https://github.com/facebook/jest to detect if Worker instances are keeping the event loop active correctly. Fixes: https://github.com/nodejs/node/issues/42091 Refs: https://github.com/mafintosh/why-is-node-running/issues/59 Signed-off-by: Darshan Sen <raisinten@gmail.com> PR-URL: https://github.com/nodejs/node/pull/42756 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
34 lines
746 B
JavaScript
34 lines
746 B
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
|
|
const { Worker } = require('worker_threads');
|
|
const { createHook } = require('async_hooks');
|
|
const { strictEqual } = require('assert');
|
|
|
|
let handle;
|
|
|
|
createHook({
|
|
init(asyncId, type, triggerAsyncId, resource) {
|
|
if (type === 'WORKER') {
|
|
handle = resource;
|
|
this.disable();
|
|
}
|
|
}
|
|
}).enable();
|
|
|
|
const w = new Worker('', { eval: true });
|
|
|
|
strictEqual(handle.hasRef(), true);
|
|
w.unref();
|
|
strictEqual(handle.hasRef(), false);
|
|
w.ref();
|
|
strictEqual(handle.hasRef(), true);
|
|
|
|
w.on('exit', common.mustCall((exitCode) => {
|
|
strictEqual(exitCode, 0);
|
|
strictEqual(handle.hasRef(), true);
|
|
setTimeout(common.mustCall(() => {
|
|
strictEqual(handle.hasRef(), undefined);
|
|
}), 0);
|
|
}));
|