From 648a220d29ad1cf37f4f68698fc2f48b5d8ec220 Mon Sep 17 00:00:00 2001 From: Davinci9196 Date: Thu, 11 Jun 2026 09:51:44 +0800 Subject: [PATCH] Fix ConcurrentModificationException in MultiConnectionKeeper --- .../microg/gms/common/MultiConnectionKeeper.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/play-services-base/src/main/java/org/microg/gms/common/MultiConnectionKeeper.java b/play-services-base/src/main/java/org/microg/gms/common/MultiConnectionKeeper.java index bc3f1ddf87..d0d755b794 100644 --- a/play-services-base/src/main/java/org/microg/gms/common/MultiConnectionKeeper.java +++ b/play-services-base/src/main/java/org/microg/gms/common/MultiConnectionKeeper.java @@ -33,13 +33,14 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import static android.os.Build.VERSION.SDK_INT; import static org.microg.gms.common.Constants.GMS_PACKAGE_NAME; @@ -201,11 +202,11 @@ public synchronized void unbind(String action, ServiceConnection connection) { public class Connection { private final String actionString; private final boolean requireMicrog; - private final Set connectionForwards = new HashSet(); - private boolean bound = false; - private boolean connected = false; - private IBinder binder; - private ComponentName component; + private final Set connectionForwards = Collections.newSetFromMap(new ConcurrentHashMap<>()); + private volatile boolean bound = false; + private volatile boolean connected = false; + private volatile IBinder binder; + private volatile ComponentName component; private ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) {