diff options
author | Sam Roberts <sam@strongloop.com> | 2015-06-11 14:43:09 -0700 |
---|---|---|
committer | Sam Roberts <sam@strongloop.com> | 2015-06-12 12:56:40 -0700 |
commit | 03ce84dfa13a1cc075bb45772a8a566213148939 (patch) | |
tree | 03a54787631f921104e7923d53f8d34cda60fd73 /test/parallel/test-cluster-worker-wait-server-close.js | |
parent | 2a7fd0ad328d5197a9a166650e9eaa51367e3152 (diff) | |
download | android-node-v8-03ce84dfa13a1cc075bb45772a8a566213148939.tar.gz android-node-v8-03ce84dfa13a1cc075bb45772a8a566213148939.tar.bz2 android-node-v8-03ce84dfa13a1cc075bb45772a8a566213148939.zip |
test: fix cluster-worker-wait-server-close races
Wait for data to arrive from worker before doing a disconnect. Without
this, whether the disconnect arrives at the worker before the master
accepts and forwards the connection descriptor to the worker is a race.
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Reviewed-By: Johan Bergström <bugs@bergstroem.nu>
Reviewed-By: Rod Vagg <rod@vagg.org>
PR-URL: https://github.com/nodejs/io.js/pull/1953
Fixes: https://github.com/nodejs/io.js/issues/1933
Fixes: https://github.com/nodejs/io.js/pull/1400
Diffstat (limited to 'test/parallel/test-cluster-worker-wait-server-close.js')
-rw-r--r-- | test/parallel/test-cluster-worker-wait-server-close.js | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/test/parallel/test-cluster-worker-wait-server-close.js b/test/parallel/test-cluster-worker-wait-server-close.js index 0f1836c7ec..0488343cae 100644 --- a/test/parallel/test-cluster-worker-wait-server-close.js +++ b/test/parallel/test-cluster-worker-wait-server-close.js @@ -8,7 +8,9 @@ var net = require('net'); if (cluster.isWorker) { net.createServer(function(socket) { // Wait for any data, then close connection - socket.on('data', socket.end.bind(socket)); + socket.write('.'); + socket.on('data', function discard() { + }); }).listen(common.PORT, common.localhostIPv4); } else if (cluster.isMaster) { @@ -22,11 +24,15 @@ if (cluster.isWorker) { worker.once('listening', function() { net.createConnection(common.PORT, common.localhostIPv4, function() { var socket = this; - worker.disconnect(); - setTimeout(function() { - socket.write('.'); - connectionDone = true; - }, 1000); + this.on('data', function() { + console.log('got data from client'); + // socket definitely connected to worker if we got data + worker.disconnect(); + setTimeout(function() { + socket.end(); + connectionDone = true; + }, 1000); + }); }); }); |