| 'use strict'; |
| |
| /* |
| * This test is a regression test for joyent/node#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.localhostIPv4, 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()); |
| } |
| })); |