From 1f6a344f4d71f2b04280445a713c999f16e92ef7 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Thu, 2 Jan 2020 07:12:06 -0800 Subject: [PATCH] Make sure that failing to process an individual event, does not crash the plugin Summary: See title Reviewed By: jknoxville Differential Revision: D19177573 fbshipit-source-id: 269a6a09887c930d446315eeaa31f28e1d100e7f --- src/utils/messageQueue.tsx | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/utils/messageQueue.tsx b/src/utils/messageQueue.tsx index d238fa6e4..27639d5ab 100644 --- a/src/utils/messageQueue.tsx +++ b/src/utils/messageQueue.tsx @@ -82,13 +82,18 @@ function processMessage( const statName = `${plugin.name}.${message.method}`; const reducerStartTime = Date.now(); flipperRecorderAddEvent(pluginKey, message.method, message.params); - const newPluginState = plugin.persistedStateReducer!( - state, - message.method, - message.params, - ); - addBackgroundStat(statName, Date.now() - reducerStartTime); - return newPluginState; + try { + const newPluginState = plugin.persistedStateReducer!( + state, + message.method, + message.params, + ); + addBackgroundStat(statName, Date.now() - reducerStartTime); + return newPluginState; + } catch (e) { + console.error(`Failed to process event for plugin ${plugin.name}`, e); + return state; + } } export function processMessageImmediately( @@ -190,10 +195,11 @@ export async function processMessageQueue( let offset = 0; let newPluginState = persistedState; do { - newPluginState = plugin.persistedStateReducer!( + newPluginState = processMessage( newPluginState, - messages[offset].method, - messages[offset].params, + pluginKey, + plugin, + messages[offset], ); offset++; progress++;