From 503b089dd86b8e165bfcd9815bebd3a579a1edb4 Mon Sep 17 00:00:00 2001 From: Evan Lucas Date: Sun, 26 Jul 2015 19:24:28 -0500 Subject: [PATCH] net: don't throw on immediately destroyed socket Fixes regression introduced in af249fa8a15bad8996187e73b480b30dcd881bad. With connect being deferred to the next tick, Socket.destroy could be called before connect. Socket.destroy sets _connecting to false which would cause an assertion error. Fixes: https://github.com/nodejs/io.js/issues/2250 PR-URL: https://github.com/nodejs/io.js/pull/2251 Reviewed-By: Colin Ihrig Reviewed-By: Jeremiah Senkpiel Reviewed-By: Sakthipriyan Vairamani --- lib/net.js | 3 ++- test/parallel/test-net-connect-immediate-destroy.js | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 test/parallel/test-net-connect-immediate-destroy.js diff --git a/lib/net.js b/lib/net.js index b5ae15e4692393..c144caaf7d17bd 100644 --- a/lib/net.js +++ b/lib/net.js @@ -927,7 +927,8 @@ function lookupAndConnect(self, options) { var addressType = exports.isIP(host); if (addressType) { process.nextTick(function() { - connect(self, host, port, addressType, localAddress, localPort); + if (self._connecting) + connect(self, host, port, addressType, localAddress, localPort); }); return; } diff --git a/test/parallel/test-net-connect-immediate-destroy.js b/test/parallel/test-net-connect-immediate-destroy.js new file mode 100644 index 00000000000000..37dc4b2d9a2391 --- /dev/null +++ b/test/parallel/test-net-connect-immediate-destroy.js @@ -0,0 +1,8 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const net = require('net'); + +const socket = net.connect(common.PORT, common.localhostIPv4, assert.fail); +socket.on('error', assert.fail); +socket.destroy();