From d5ab46d662a6eec1f170d7689eb90c9e958f71aa Mon Sep 17 00:00:00 2001 From: Daniel Shaw Date: Sat, 26 Nov 2011 11:22:43 -0800 Subject: [PATCH 1/2] Fixes leaking Redis subscriptions for #663. The local flag was not getting passed through onClientDisconnect(). --- lib/manager.js | 4 ++-- lib/transport.js | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/manager.js b/lib/manager.js index 5103b00af3..909eca4a9c 100644 --- a/lib/manager.js +++ b/lib/manager.js @@ -468,13 +468,13 @@ Manager.prototype.onClientMessage = function (id, packet) { * @api private */ -Manager.prototype.onClientDisconnect = function (id, reason) { +Manager.prototype.onClientDisconnect = function (id, reason, local) { for (var name in this.namespaces) { this.namespaces[name].handleDisconnect(id, reason, typeof this.roomClients[id] !== 'undefined' && typeof this.roomClients[id][name] !== 'undefined'); } - this.onDisconnect(id); + this.onDisconnect(id, local); }; /** diff --git a/lib/transport.js b/lib/transport.js index 61f456fce9..540d67f956 100644 --- a/lib/transport.js +++ b/lib/transport.js @@ -457,14 +457,15 @@ Transport.prototype.end = function (reason) { if (!this.disconnected) { this.log.info('transport end'); - var local = this.manager.transports[this.id]; + var local = !!this.manager.transports[this.id]; this.close(); this.clearTimeouts(); this.disconnected = true; + if (local) { - this.manager.onClientDisconnect(this.id, reason, true); + this.manager.onClientDisconnect(this.id, reason, local); } else { this.store.publish('disconnect:' + this.id, reason); } From c110036f752190a9abec65aa777d42805e92214e Mon Sep 17 00:00:00 2001 From: Daniel Shaw Date: Sat, 26 Nov 2011 12:14:39 -0800 Subject: [PATCH 2/2] Handle leaked dispatch:[id] subscription. --- lib/manager.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/manager.js b/lib/manager.js index 909eca4a9c..b77b9d6428 100644 --- a/lib/manager.js +++ b/lib/manager.js @@ -474,6 +474,7 @@ Manager.prototype.onClientDisconnect = function (id, reason, local) { typeof this.roomClients[id][name] !== 'undefined'); } + if (local) this.store.publish('disconnect', id); this.onDisconnect(id, local); };