From 011dc8904fffba4cb0c87994fe6787d99664d457 Mon Sep 17 00:00:00 2001 From: Hedger Wang Date: Wed, 17 Feb 2016 02:28:29 -0800 Subject: [PATCH] Unbreak master build. Summary:public == cause == The follow block is error-prone. ``` for (ReactInstanceEventListener listener : mReactInstanceEventListeners) { listener.onReactContextInitialized(reactContext); } ``` Because calling `listener.onReactContextInitialized` may have side-effect that removes the `listener` from `mReactInstanceEventListeners`, thus break the iteration with exception. I've found at least one place that has such side-effect diffusion/FA/browse/master/java/com/facebook/fbreact/autoupdater/AutoUpdaterScheduler.java;9c09e5bbd411e093fb2ad022ee5d0ea473e9ebfe$32 The right way to fix this is to be side-effect proof. Reviewed By: zahanm Differential Revision: D2943494 fb-gh-sync-id: ba848ea736c5d2d0b8ef0b5a899603d734781361 shipit-source-id: ba848ea736c5d2d0b8ef0b5a899603d734781361 --- .../java/com/facebook/react/ReactInstanceManagerImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerImpl.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerImpl.java index 88a064c6cd..1b8ac840ab 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerImpl.java @@ -663,7 +663,11 @@ import static com.facebook.react.bridge.ReactMarkerConstants.*; attachMeasuredRootViewToInstance(rootView, catalystInstance); } - for (ReactInstanceEventListener listener : mReactInstanceEventListeners) { + ReactInstanceEventListener[] listeners = + new ReactInstanceEventListener[mReactInstanceEventListeners.size()]; + listeners = mReactInstanceEventListeners.toArray(listeners); + + for (ReactInstanceEventListener listener : listeners) { listener.onReactContextInitialized(reactContext); } }