From 60b93cca6da77222ca9082e54ba8acad547d9d94 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Thu, 19 Aug 2010 18:49:27 -0700 Subject: [PATCH] Fix race conditions in test-dgram-multicast.js --- test/simple/test-dgram-multicast.js | 82 +++++++++++++++++------------ 1 file changed, 47 insertions(+), 35 deletions(-) diff --git a/test/simple/test-dgram-multicast.js b/test/simple/test-dgram-multicast.js index 75c4443657..14c86f5617 100644 --- a/test/simple/test-dgram-multicast.js +++ b/test/simple/test-dgram-multicast.js @@ -5,7 +5,6 @@ var dgram = require("dgram"), sys = require('sys'), assert = require('assert'), Buffer = require("buffer").Buffer; -var timeoutTimer; var LOCAL_BROADCAST_HOST = '224.0.0.1'; var sendMessages = [ new Buffer("First message to send"), @@ -13,63 +12,76 @@ var sendMessages = [ new Buffer("Third message to send"), new Buffer("Fourth message to send") ]; + var listenSockets = []; + var sendSocket = dgram.createSocket('udp4') - .on('close', function () { console.log('sendSocket closed'); }) - .on('error', function (err) { throw err; }); + +sendSocket.on('close', function () { + console.error('sendSocket closed'); +}) + sendSocket.setBroadcast(true); + var i = 0; -sendSocket.sendNext = function (){ - sendSocket.started = true; + +sendSocket.sendNext = function () { var buf = sendMessages[i++]; + if (!buf) { try { sendSocket.close(); }catch(e){} - listenSockets.forEach(function (sock) { sock.close(); }); - clearTimeout(timeoutTimer); return; } - sendSocket.send(buf, 0, buf.length, common.PORT, LOCAL_BROADCAST_HOST, - function (err) { + + sendSocket.send(buf, 0, buf.length, common.PORT, LOCAL_BROADCAST_HOST, function (err) { if (err) throw err; - console.log('sent %s to %s', sys.inspect(buf.toString()), + console.error('sent %s to %s', sys.inspect(buf.toString()), LOCAL_BROADCAST_HOST+common.PORT); process.nextTick(sendSocket.sendNext); }); -} +}; + +listener_count = 0; function mkListener() { var receivedMessages = []; var listenSocket = dgram.createSocket('udp4') - .on('message', function(buf, rinfo) { - console.log('received %s from %j', sys.inspect(buf.toString()), rinfo); - receivedMessages.push(buf); - }) - .on('close', function () { - console.log('listenSocket closed -- checking received messages'); - var count = 0; - receivedMessages.forEach(function(buf){ - for (var i=0; i