| 'use strict'; |
| const common = require('../common'); |
| |
| const { Worker } = require('worker_threads'); |
| const { createHook } = require('async_hooks'); |
| const assert = require('assert'); |
| |
| let handle; |
| |
| createHook({ |
| init(asyncId, type, triggerAsyncId, resource) { |
| if (type === 'WORKER') { |
| handle = resource; |
| this.disable(); |
| } |
| } |
| }).enable(); |
| |
| const w = new Worker('', { eval: true }); |
| |
| assert.strictEqual(handle.hasRef(), true); |
| w.unref(); |
| assert.strictEqual(handle.hasRef(), false); |
| w.ref(); |
| assert.strictEqual(handle.hasRef(), true); |
| |
| w.on('exit', common.mustCall((exitCode) => { |
| assert.strictEqual(exitCode, 0); |
| assert.strictEqual(handle.hasRef(), true); |
| setTimeout(common.mustCall(() => { |
| assert.strictEqual(handle.hasRef(), undefined); |
| }), 0); |
| })); |