mirror of
https://github.com/webtorrent/bittorrent-tracker.git
synced 2024-12-14 11:26:25 +00:00
Merge pull request #208 from feross/fix-205
Fix socket.infoHashes access error
This commit is contained in:
commit
7652e7465c
@ -29,15 +29,7 @@ function Swarm (infoHash, server) {
|
|||||||
peer_id: peer.peerId
|
peer_id: peer.peerId
|
||||||
}
|
}
|
||||||
self._onAnnounceStopped(params, peer, peer.peerId)
|
self._onAnnounceStopped(params, peer, peer.peerId)
|
||||||
|
|
||||||
// When a websocket peer is evicted, and it's not in any other swarms, close
|
|
||||||
// the websocket to conserve server resources.
|
|
||||||
if (peer.socket && peer.socket.infoHashes.length === 0) {
|
|
||||||
try {
|
|
||||||
peer.socket.close()
|
|
||||||
peer.socket = null
|
peer.socket = null
|
||||||
} catch (err) {}
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,7 +94,7 @@ Swarm.prototype._onAnnounceStopped = function (params, peer, id) {
|
|||||||
|
|
||||||
// If it's a websocket, remove this swarm's infohash from the list of active
|
// If it's a websocket, remove this swarm's infohash from the list of active
|
||||||
// swarms that this peer is participating in.
|
// swarms that this peer is participating in.
|
||||||
if (peer.socket) {
|
if (peer.socket && !peer.socket.destroyed) {
|
||||||
var index = peer.socket.infoHashes.indexOf(this.infoHash)
|
var index = peer.socket.infoHashes.indexOf(this.infoHash)
|
||||||
arrayRemove(peer.socket.infoHashes, index)
|
arrayRemove(peer.socket.infoHashes, index)
|
||||||
}
|
}
|
||||||
|
@ -491,7 +491,7 @@ Server.prototype._onWebSocketRequest = function (socket, opts, params) {
|
|||||||
if (!socket.peerId) socket.peerId = params.peer_id // as hex
|
if (!socket.peerId) socket.peerId = params.peer_id // as hex
|
||||||
|
|
||||||
self._onRequest(params, function (err, response) {
|
self._onRequest(params, function (err, response) {
|
||||||
if (self.destroyed) return
|
if (self.destroyed || socket.destroyed) return
|
||||||
if (err) {
|
if (err) {
|
||||||
socket.send(JSON.stringify({
|
socket.send(JSON.stringify({
|
||||||
action: params.action === common.ACTIONS.ANNOUNCE ? 'announce' : 'scrape',
|
action: params.action === common.ACTIONS.ANNOUNCE ? 'announce' : 'scrape',
|
||||||
@ -545,6 +545,7 @@ Server.prototype._onWebSocketRequest = function (socket, opts, params) {
|
|||||||
debug('got answer %s from %s', JSON.stringify(params.answer), params.peer_id)
|
debug('got answer %s from %s', JSON.stringify(params.answer), params.peer_id)
|
||||||
|
|
||||||
self.getSwarm(params.info_hash, function (err, swarm) {
|
self.getSwarm(params.info_hash, function (err, swarm) {
|
||||||
|
if (self.destroyed) return
|
||||||
if (err) return self.emit('warning', err)
|
if (err) return self.emit('warning', err)
|
||||||
if (!swarm) {
|
if (!swarm) {
|
||||||
return self.emit('warning', new Error('no swarm with that `info_hash`'))
|
return self.emit('warning', new Error('no swarm with that `info_hash`'))
|
||||||
@ -587,6 +588,7 @@ Server.prototype._onWebSocketSend = function (socket, err) {
|
|||||||
Server.prototype._onWebSocketClose = function (socket) {
|
Server.prototype._onWebSocketClose = function (socket) {
|
||||||
var self = this
|
var self = this
|
||||||
debug('websocket close %s', socket.peerId)
|
debug('websocket close %s', socket.peerId)
|
||||||
|
socket.destroyed = true
|
||||||
|
|
||||||
if (socket.peerId) {
|
if (socket.peerId) {
|
||||||
socket.infoHashes.slice(0).forEach(function (infoHash) {
|
socket.infoHashes.slice(0).forEach(function (infoHash) {
|
||||||
|
Loading…
Reference in New Issue
Block a user