From b2cbfafae7f442eba37e52a995e7f24766c90c1c Mon Sep 17 00:00:00 2001 From: Feross Aboukhadijeh Date: Fri, 16 Sep 2016 07:49:29 -0700 Subject: [PATCH 1/2] use 'once' on some event handlers --- lib/client/websocket-tracker.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/client/websocket-tracker.js b/lib/client/websocket-tracker.js index b0aa6b5..3cd7d1f 100644 --- a/lib/client/websocket-tracker.js +++ b/lib/client/websocket-tracker.js @@ -169,12 +169,12 @@ WebSocketTracker.prototype._openSocket = function () { } else { self.socket = socketPool[self.announceUrl] = new Socket(self.announceUrl) self.socket.consumers = 1 - self.socket.on('connect', self._onSocketConnectBound) + self.socket.once('connect', self._onSocketConnectBound) } self.socket.on('data', self._onSocketDataBound) - self.socket.on('close', self._onSocketCloseBound) - self.socket.on('error', self._onSocketErrorBound) + self.socket.once('close', self._onSocketCloseBound) + self.socket.once('error', self._onSocketErrorBound) } WebSocketTracker.prototype._onSocketConnect = function () { From 15a35cedd96d74ed29155f148ccc5a1c7ce46e50 Mon Sep 17 00:00:00 2001 From: Feross Aboukhadijeh Date: Fri, 16 Sep 2016 07:49:49 -0700 Subject: [PATCH 2/2] add test: no "update" events after destroy() --- test/destroy.js | 51 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 test/destroy.js diff --git a/test/destroy.js b/test/destroy.js new file mode 100644 index 0000000..f6eafb6 --- /dev/null +++ b/test/destroy.js @@ -0,0 +1,51 @@ +var Buffer = require('safe-buffer').Buffer +var Client = require('../') +var common = require('./common') +var fixtures = require('webtorrent-fixtures') +var test = require('tape') + +var peerId = Buffer.from('01234567890123456789') +var port = 6881 + +function testNoEventsAfterDestroy (t, serverType) { + t.plan(1) + + common.createServer(t, serverType, function (server, announceUrl) { + var client = new Client({ + infoHash: fixtures.leaves.parsedTorrent.infoHash, + announce: announceUrl, + peerId: peerId, + port: port, + wrtc: {} + }) + + if (serverType === 'ws') common.mockWebsocketTracker(client) + client.on('error', function (err) { t.error(err) }) + client.on('warning', function (err) { t.error(err) }) + + client.once('update', function () { + t.fail('no "update" event should fire, since client is destroyed') + }) + + // announce, then immediately destroy + client.update() + client.destroy() + + setTimeout(function () { + t.pass('wait to see if any events are fired') + server.close() + }, 1000) + }) +} + +test('http: no "update" events after destroy()', function (t) { + testNoEventsAfterDestroy(t, 'http') +}) + +test('udp: no "update" events after destroy()', function (t) { + testNoEventsAfterDestroy(t, 'udp') +}) + +test('ws: no "update" events after destroy()', function (t) { + testNoEventsAfterDestroy(t, 'ws') +})