From c8c2866087bcac8ce93a571afbd8c2fa5d22a8de Mon Sep 17 00:00:00 2001 From: webzwo0i Date: Thu, 20 Feb 2014 16:33:42 +0100 Subject: [PATCH 1/2] fix crash if disconnect happens for sessions that have messages queued --- src/node/handler/PadMessageHandler.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index 774ebf081..752710217 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -588,6 +588,14 @@ function handleUserChanges(data, cb) messageLogger.warn("Dropped message, USER_CHANGES Message has no changeset!"); return cb(); } + //TODO: this might happen with other messages too => find one place to copy the session + //and always use the copy. atm a message will be ignored if the session is gone even + //if the session was valid when the message arrived in the first place + if(!sessioninfos[client.id]) + { + messageLogger.warn("Dropped message, disconnect happened in the mean time"); + return cb(); + } //get all Vars we need var baseRev = message.data.baseRev; From fa681d43f7c10f4ac22a2c394e26aa09f9792a57 Mon Sep 17 00:00:00 2001 From: webzwo0i Date: Thu, 20 Feb 2014 17:38:25 +0100 Subject: [PATCH 2/2] remember user session because it can be gone when finalHandler is called --- src/node/handler/PadMessageHandler.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index 752710217..1399c5d2b 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -167,7 +167,8 @@ exports.handleMessage = function(client, message) { return; } - if(!sessioninfos[client.id]) { + var thisSession = sessioninfos[client.id] + if(!thisSession) { messageLogger.warn("Dropped message from an unknown connection.") return; } @@ -196,7 +197,7 @@ exports.handleMessage = function(client, message) } else if(message.type == "CHANGESET_REQ") { handleChangesetRequest(client, message); } else if(message.type == "COLLABROOM") { - if (sessioninfos[client.id].readonly) { + if (thisSession.readonly) { messageLogger.warn("Dropped message, COLLABROOM for readonly pad"); } else if (message.data.type == "USER_CHANGES") { stats.counter('pendingEdits').inc()