// deno-fmt-ignore-file // deno-lint-ignore-file // Copyright Joyent and Node contributors. All rights reserved. MIT license. // Taken from Node 20.11.1 // This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually. 'use strict'; // Regression test for https://github.com/nodejs/node-v0.x-archive/issues/8897. const common = require('../common'); const net = require('net'); const Countdown = require('../common/countdown'); const clients = []; const server = net.createServer(function onClient(client) { clients.push(client); if (clients.length === 2) { // Enroll two timers, and make the one supposed to fire first // unenroll the other one supposed to fire later. This mutates // the list of unref timers when traversing it, and exposes the // original issue in joyent/node#8897. clients[0].setTimeout(1, () => { clients[1].setTimeout(0); clients[0].end(); clients[1].end(); }); // Use a delay that is higher than the lowest timer resolution across all // supported platforms, so that the two timers don't fire at the same time. clients[1].setTimeout(50); } }); server.listen(0, common.mustCall(() => { const countdown = new Countdown(2, () => server.close()); { const client = net.connect({ port: server.address().port }); client.on('end', () => countdown.dec()); } { const client = net.connect({ port: server.address().port }); client.on('end', () => countdown.dec()); } }));