1'use strict'; 2const common = require('../common'); 3 4const { MessageChannel } = require('worker_threads'); 5const { createHook } = require('async_hooks'); 6const { strictEqual } = require('assert'); 7 8const handles = []; 9 10createHook({ 11 init(asyncId, type, triggerAsyncId, resource) { 12 if (type === 'MESSAGEPORT') { 13 handles.push(resource); 14 } 15 } 16}).enable(); 17 18const { port1, port2 } = new MessageChannel(); 19strictEqual(handles[0], port1); 20strictEqual(handles[1], port2); 21 22strictEqual(handles[0].hasRef(), false); 23strictEqual(handles[1].hasRef(), false); 24 25port1.unref(); 26strictEqual(handles[0].hasRef(), false); 27 28port1.ref(); 29strictEqual(handles[0].hasRef(), true); 30 31port1.unref(); 32strictEqual(handles[0].hasRef(), false); 33 34port1.on('message', () => {}); 35strictEqual(handles[0].hasRef(), true); 36 37port2.unref(); 38strictEqual(handles[1].hasRef(), false); 39 40port2.ref(); 41strictEqual(handles[1].hasRef(), true); 42 43port2.unref(); 44strictEqual(handles[1].hasRef(), false); 45 46port2.on('message', () => {}); 47strictEqual(handles[0].hasRef(), true); 48 49port1.on('close', common.mustCall(() => { 50 strictEqual(handles[0].hasRef(), false); 51 strictEqual(handles[1].hasRef(), false); 52})); 53 54port2.close(); 55 56strictEqual(handles[0].hasRef(), true); 57strictEqual(handles[1].hasRef(), true); 58