From 55b95c52d61e0855f5f8e60ebae7fc92a2c353ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Wed, 3 Jul 2019 12:14:23 +0200 Subject: [PATCH] android: fix synchronized access to listeners set Fixes this issue: ~~~ java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextNode(HashMap.java:1441) at java.util.HashMap$KeyIterator.next(HashMap.java:1465) at org.jitsi.meet.sdk.OngoingConferenceTracker.updateListeners(OngoingConferenceTracker.java:89) at org.jitsi.meet.sdk.OngoingConferenceTracker.onExternalAPIEvent(OngoingConferenceTracker.java:74) at org.jitsi.meet.sdk.ExternalAPIModule.sendEvent(ExternalAPIModule.java:71) at java.lang.reflect.Method.invoke(Native Method) at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372) at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:158) at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:29) at android.os.Looper.loop(Looper.java:214) at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:232) at java.lang.Thread.run(Thread.java:764) ~~~ --- .../java/org/jitsi/meet/sdk/OngoingConferenceTracker.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/android/sdk/src/main/java/org/jitsi/meet/sdk/OngoingConferenceTracker.java b/android/sdk/src/main/java/org/jitsi/meet/sdk/OngoingConferenceTracker.java index 4e6f661ec..f603d6780 100644 --- a/android/sdk/src/main/java/org/jitsi/meet/sdk/OngoingConferenceTracker.java +++ b/android/sdk/src/main/java/org/jitsi/meet/sdk/OngoingConferenceTracker.java @@ -86,8 +86,10 @@ class OngoingConferenceTracker { } private void updateListeners() { - for (OngoingConferenceListener listener : listeners) { - listener.onCurrentConferenceChanged(currentConference); + synchronized (listeners) { + for (OngoingConferenceListener listener : listeners) { + listener.onCurrentConferenceChanged(currentConference); + } } }