From b2c2b8f0d0b1c42c13c43391007f06d64f7694af Mon Sep 17 00:00:00 2001 From: Feross Aboukhadijeh Date: Tue, 21 Feb 2017 01:50:30 -0800 Subject: [PATCH] do not access socket.infoHashes if socket is destroyed --- lib/server/swarm.js | 2 +- server.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/server/swarm.js b/lib/server/swarm.js index 9054268..773caba 100644 --- a/lib/server/swarm.js +++ b/lib/server/swarm.js @@ -102,7 +102,7 @@ Swarm.prototype._onAnnounceStopped = function (params, peer, id) { // If it's a websocket, remove this swarm's infohash from the list of active // swarms that this peer is participating in. - if (peer.socket) { + if (peer.socket && !peer.socket.destroyed) { var index = peer.socket.infoHashes.indexOf(this.infoHash) arrayRemove(peer.socket.infoHashes, index) } diff --git a/server.js b/server.js index 4528f3d..9186c46 100644 --- a/server.js +++ b/server.js @@ -491,7 +491,7 @@ Server.prototype._onWebSocketRequest = function (socket, opts, params) { if (!socket.peerId) socket.peerId = params.peer_id // as hex self._onRequest(params, function (err, response) { - if (self.destroyed) return + if (self.destroyed || socket.destroyed) return if (err) { socket.send(JSON.stringify({ action: params.action === common.ACTIONS.ANNOUNCE ? 'announce' : 'scrape', @@ -587,6 +587,7 @@ Server.prototype._onWebSocketSend = function (socket, err) { Server.prototype._onWebSocketClose = function (socket) { var self = this debug('websocket close %s', socket.peerId) + socket.destroyed = true if (socket.peerId) { socket.infoHashes.slice(0).forEach(function (infoHash) {