From e16008b3719855d95cf0bb3402a0ac67eb319d47 Mon Sep 17 00:00:00 2001 From: Richard Braakman Date: Wed, 26 Sep 2012 03:01:53 +0300 Subject: [PATCH] Fix sessioninfos race that can cause crash during USER_CHANGES handling When stress testing etherpad-lite we occasionally got this error: TypeError: Cannot read property 'author' of undefined at /home/etherpad/etherpad-lite/src/node/handler/PadMessageHandler.js:556:47 handleUserChanges was accessing sessioninfos[client.id].author in a callback, after spending some time in the loop that updates the changeset to the latest revision. It's possible for a disconnect request to be processed during that loop so the session might no longer be there. This patch fixes it by looking up the author at the start of the function. --- src/node/handler/PadMessageHandler.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index 913433b01..160686804 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -465,6 +465,7 @@ function handleUserChanges(client, message) var baseRev = message.data.baseRev; var wireApool = (new AttributePool()).fromJsonable(message.data.apool); var changeset = message.data.changeset; + var thisAuthor = sessioninfos[client.id].author; var r, apool, pad; @@ -545,8 +546,6 @@ function handleUserChanges(client, message) return; } - var thisAuthor = sessioninfos[client.id].author; - pad.appendRevision(changeset, thisAuthor); var correctionChangeset = _correctMarkersInPad(pad.atext, pad.pool);