From 8ca859b786061453c44c11ebaad52fe4f90cdebc Mon Sep 17 00:00:00 2001 From: Nick Martin Date: Wed, 4 Dec 2013 20:54:36 -0800 Subject: [PATCH] safety belts. --- packages/accounts-base/accounts_server.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/accounts-base/accounts_server.js b/packages/accounts-base/accounts_server.js index b26d988fe9..1dde7a7788 100644 --- a/packages/accounts-base/accounts_server.js +++ b/packages/accounts-base/accounts_server.js @@ -153,6 +153,12 @@ Accounts._getAccountData = function (connectionId, field) { Accounts._setAccountData = function (connectionId, field, value) { var data = accountData[connectionId]; + + // safety belt. shouldn't happen. accountData is set in onConnection, + // we don't have a connectionId until it is set. + if (!data) + return; + if (value === undefined) delete data[field]; else @@ -215,10 +221,13 @@ Accounts._setLoginToken = function (connectionId, newToken) { var closeConnectionsForTokens = function (tokens) { _.each(tokens, function (token) { if (_.has(connectionsByLoginToken, token)) { - _.each(connectionsByLoginToken[token], function (connectionId) { - var connection = Accounts._getAccountData(connectionId, 'connection'); - if (connection) - connection.close(); + // safety belt. close should defer potentially yielding callbacks. + Meteor._noYieldsAllowed(function () { + _.each(connectionsByLoginToken[token], function (connectionId) { + var connection = Accounts._getAccountData(connectionId, 'connection'); + if (connection) + connection.close(); + }); }); } });