From 3049dbb29b6d03f7c49722dbe2fa9c9b278f7120 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Fri, 18 Mar 2022 11:47:04 +0800 Subject: [PATCH] Use COW array set for loaded modules (#1771) --- .../java/de/robv/android/xposed/XposedInit.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/de/robv/android/xposed/XposedInit.java b/core/src/main/java/de/robv/android/xposed/XposedInit.java index f8d550fa..0c011c6d 100644 --- a/core/src/main/java/de/robv/android/xposed/XposedInit.java +++ b/core/src/main/java/de/robv/android/xposed/XposedInit.java @@ -37,7 +37,6 @@ import android.content.res.XResources; import android.os.Build; import android.os.IBinder; import android.os.Process; -import android.util.ArraySet; import android.util.Log; import org.lsposed.lspd.models.PreLoadedApk; @@ -52,6 +51,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.atomic.AtomicBoolean; import de.robv.android.xposed.callbacks.XC_InitPackageResources; @@ -214,20 +214,21 @@ public final class XposedInit { return newRes; } - private static final ArraySet loadedModules = new ArraySet<>(); + private static final Set loadedModules = new CopyOnWriteArraySet<>(); - synchronized public static ArraySet getLoadedModules() { + public static Set getLoadedModules() { return loadedModules; } - synchronized public static void loadModules() { + public static void loadModules() { var moduleList = serviceClient.getModulesList(); moduleList.forEach(module -> { var apk = module.apkPath; var name = module.packageName; var file = module.file; - if (loadModule(name, apk, file)) { - loadedModules.add(apk); // temporarily add it for XSharedPreference + loadedModules.add(apk); // temporarily add it for XSharedPreference + if (!loadModule(name, apk, file)) { + loadedModules.remove(apk); } }); }