From 16164c25d87d994eff74b02e6e3f01c25e5d1600 Mon Sep 17 00:00:00 2001 From: Alexey Kasyanchuk Date: Fri, 22 Jun 2018 23:51:57 +0300 Subject: [PATCH] fix(closing): more proper closing without errors --- src/background/p2p.js | 1 + src/background/spider.js | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/background/p2p.js b/src/background/p2p.js index 8e2040c..98db3fc 100644 --- a/src/background/p2p.js +++ b/src/background/p2p.js @@ -181,6 +181,7 @@ class p2p { for (const client in this.clients) { this.clients[client]._socket.destroy(); } + this.peers = [] return promise } diff --git a/src/background/spider.js b/src/background/spider.js index 439219b..c87f038 100644 --- a/src/background/spider.js +++ b/src/background/spider.js @@ -312,7 +312,7 @@ setInterval(() => { const updateTorrentTrackers = (hash) => { let maxSeeders = 0, maxLeechers = 0, maxCompleted = 0; - mysqlSingle.query('UPDATE torrents SET trackersChecked = ? WHERE hash = ?', [Math.floor(Date.now() / 1000), hash], function(err, result) { + mysqlSingle.query('UPDATE torrents SET trackersChecked = ? WHERE hash = ?', [Math.floor(Date.now() / 1000), hash], (err, result) => { if(!result) { console.error(err); return @@ -320,6 +320,9 @@ setInterval(() => { udpTrackers.forEach((tracker) => { getPeersStatisticUDP(tracker.host, tracker.port, hash, ({seeders, completed, leechers}) => { + if(this.closing) // ignore trackers response if app is closing + return + if(seeders == 0 && completed == 0 && leechers == 0) return; @@ -769,13 +772,11 @@ setInterval(() => { } this.stop = async (callback) => { + this.closing = true console.log('spider closing...') if(upnp) upnp.ratsUnmap() - console.log('closing p2p...') - await p2p.close() - // save feed await feed.save() @@ -840,6 +841,14 @@ setInterval(() => { } } + console.log('closing p2p...') + // don't listen spider peer appears + spider.removeAllListeners('peer') + await p2p.close() + + // don't listen complete torrent responses + client.removeAllListeners('complete') + torrentClient.destroy(() => { sphinx.end(() => spider.close(() => { mysqlSingle.destroy()