@@ -88,7 +88,7 @@ WebSocketTracker.prototype.destroy = function (cb) {
8888 self . destroyed = true
8989 clearInterval ( self . interval )
9090
91- delete socketPool [ self . announceUrl ]
91+ if ( socketPool [ self . announceUrl ] ) socketPool [ self . announceUrl ] . consumers --
9292
9393 self . socket . removeListener ( 'connect' , self . _onSocketConnectBound )
9494 self . socket . removeListener ( 'data' , self . _onSocketDataBound )
@@ -100,11 +100,16 @@ WebSocketTracker.prototype.destroy = function (cb) {
100100 self . _onSocketDataBound = null
101101 self . _onSocketCloseBound = null
102102
103- self . socket . on ( 'error' , noop ) // ignore all future errors
104- try {
105- self . socket . destroy ( cb )
106- } catch ( err ) {
107- cb ( null )
103+ if ( socketPool [ self . announceUrl ] . consumers === 0 ) {
104+ delete socketPool [ self . announceUrl ]
105+
106+ self . socket . on ( 'error' , noop ) // ignore all future errors
107+
108+ try {
109+ self . socket . destroy ( cb )
110+ } catch ( err ) {
111+ if ( cb ) cb ( )
112+ }
108113 }
109114
110115 self . socket = null
@@ -122,7 +127,10 @@ WebSocketTracker.prototype._openSocket = function () {
122127 self . socket = socketPool [ self . announceUrl ]
123128 if ( ! self . socket ) {
124129 self . socket = socketPool [ self . announceUrl ] = new Socket ( self . announceUrl )
130+ self . socket . consumers = 1
125131 self . socket . on ( 'connect' , self . _onSocketConnectBound )
132+ } else {
133+ socketPool [ self . announceUrl ] . consumers ++
126134 }
127135
128136 self . socket . on ( 'data' , self . _onSocketDataBound )
0 commit comments