mirror of
https://github.com/nodejs/node.git
synced 2025-05-04 04:43:16 +00:00

On Windows there can exist some race condition where the notification of the client's `socket.destroy()` isn't received before the server writes to the socket. This race condition was more evident/reproducible on a single core system. This commit fixes the flakiness by waiting until the server's connection event handler has been called to destroy the client socket and perform the server socket write. Fixes: https://github.com/nodejs/node/issues/4057 PR-URL: https://github.com/nodejs/node/pull/4342 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: João Reis <reis@janeasystems.com>
45 lines
939 B
JavaScript
45 lines
939 B
JavaScript
'use strict';
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const net = require('net');
|
|
|
|
const buf = new Buffer(10 * 1024 * 1024);
|
|
|
|
buf.fill(0x62);
|
|
|
|
const errs = [];
|
|
var clientSocket;
|
|
var serverSocket;
|
|
|
|
function ready() {
|
|
if (clientSocket && serverSocket) {
|
|
clientSocket.destroy();
|
|
serverSocket.write(buf);
|
|
}
|
|
}
|
|
|
|
var srv = net.createServer(function onConnection(conn) {
|
|
conn.on('error', function(err) {
|
|
errs.push(err);
|
|
if (errs.length > 1 && errs[0] === errs[1])
|
|
assert(false, 'We should not be emitting the same error twice');
|
|
});
|
|
conn.on('close', function() {
|
|
srv.unref();
|
|
});
|
|
serverSocket = conn;
|
|
ready();
|
|
}).listen(common.PORT, function() {
|
|
var client = net.connect({ port: common.PORT });
|
|
|
|
client.on('connect', function() {
|
|
clientSocket = client;
|
|
ready();
|
|
});
|
|
});
|
|
|
|
process.on('exit', function() {
|
|
console.log(errs);
|
|
assert.equal(errs.length, 1);
|
|
});
|