From f5f1fe6ae694970b0a0ad2a8e8682134f78a1d84 Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Tue, 11 Jul 2017 17:09:06 +0100 Subject: [PATCH] Fix a race in session loading code it was possible for on_logging_in to get dispatched *after* on_logged_in, causing the app to wedge. Fix it by dispatching on_logging_in synchronously. --- src/Lifecycle.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Lifecycle.js b/src/Lifecycle.js index f64e2b3858..00a82bad21 100644 --- a/src/Lifecycle.js +++ b/src/Lifecycle.js @@ -309,7 +309,10 @@ async function _doSetLoggedIn(credentials, clearStorage) { // because `teamPromise` may take some time to resolve, breaking the assumption that // `setLoggedIn` takes an "instant" to complete, and dispatch `on_logged_in` a few ms // later than MatrixChat might assume. - dis.dispatch({action: 'on_logging_in'}); + // + // we fire it *synchronously* to make sure it fires before on_logged_in. + // (dis.dispatch uses `setTimeout`, which does not guarantee ordering.) + dis.dispatch({action: 'on_logging_in'}, true); if (clearStorage) { await _clearStorage(); @@ -344,6 +347,9 @@ async function _doSetLoggedIn(credentials, clearStorage) { localStorage.setItem("mx_team_token", body.team_token); } return body.team_token; + }, (err) => { + console.warn(`Failed to get team token on login: ${err}` ); + return null; }); } } else { @@ -354,9 +360,6 @@ async function _doSetLoggedIn(credentials, clearStorage) { teamPromise.then((teamToken) => { dis.dispatch({action: 'on_logged_in', teamToken: teamToken}); - }, (err) => { - console.warn("Failed to get team token on login", err); - dis.dispatch({action: 'on_logged_in', teamToken: null}); }); startMatrixClient();