| '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()); |
| } |
| })); |