Skip to content

Commit 6e6c507

Browse files
pgtedaviddias
authored andcommitted
fix: remove peer once the peer closes. should fix peer leak (#52)
* fix: remove peer once the peer closes. should fix peer leak * test: added test to check if peers are leaking
1 parent acdd08d commit 6e6c507

File tree

3 files changed

+21
-13
lines changed

3 files changed

+21
-13
lines changed

src/index.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,14 @@ class FloodSub extends EventEmitter {
7070
Connection specifically between me and that Peer"
7171
*/
7272
let existing = this.peers.get(id)
73-
if (existing) {
74-
log('already existing peer', id)
75-
++existing._references
76-
} else {
73+
if (!existing) {
7774
log('new peer', id)
7875
this.peers.set(id, peer)
7976
existing = peer
77+
78+
peer.once('close', () => this._removePeer(peer))
8079
}
80+
++existing._references
8181

8282
return existing
8383
}

src/peer.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class Peer extends EventEmitter {
3535
*/
3636
this.stream = null
3737

38-
this._references = 1
38+
this._references = 0
3939
}
4040

4141
/**

test/2-nodes.js

+16-8
Original file line numberDiff line numberDiff line change
@@ -304,13 +304,6 @@ describe('basics between 2 nodes', () => {
304304
})
305305
})
306306

307-
after((done) => {
308-
parallel([
309-
(cb) => nodeA.stop(cb),
310-
(cb) => nodeB.stop(cb)
311-
], done)
312-
})
313-
314307
it('peer is removed from the state when connection ends', (done) => {
315308
nodeA.dial(nodeB.peerInfo, (err) => {
316309
expect(err).to.not.exist()
@@ -321,10 +314,25 @@ describe('basics between 2 nodes', () => {
321314
fsA.stop(() => setTimeout(() => {
322315
expect(first(fsB.peers)._references).to.equal(1)
323316
done()
324-
}, 250))
317+
}, 1000))
325318
}, 1000)
326319
})
327320
})
321+
322+
it('stop one node', (done) => {
323+
parallel([
324+
(cb) => nodeA.stop(cb),
325+
(cb) => nodeB.stop(cb)
326+
], done)
327+
})
328+
329+
it('nodes don\'t have peers in it', (done) => {
330+
setTimeout(() => {
331+
expect(fsA.peers.size).to.equal(0)
332+
expect(fsB.peers.size).to.equal(0)
333+
done()
334+
}, 1000)
335+
})
328336
})
329337

330338
describe('dial the pubsub protocol on mount', () => {

0 commit comments

Comments
 (0)