Use COW array set for loaded modules (#1771)

This commit is contained in:
LoveSy 2022-03-18 11:47:04 +08:00 committed by GitHub
parent f0c04177d6
commit 3049dbb29b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 7 additions and 6 deletions

View File

@ -37,7 +37,6 @@ import android.content.res.XResources;
import android.os.Build; import android.os.Build;
import android.os.IBinder; import android.os.IBinder;
import android.os.Process; import android.os.Process;
import android.util.ArraySet;
import android.util.Log; import android.util.Log;
import org.lsposed.lspd.models.PreLoadedApk; import org.lsposed.lspd.models.PreLoadedApk;
@ -52,6 +51,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import de.robv.android.xposed.callbacks.XC_InitPackageResources; import de.robv.android.xposed.callbacks.XC_InitPackageResources;
@ -214,20 +214,21 @@ public final class XposedInit {
return newRes; return newRes;
} }
private static final ArraySet<String> loadedModules = new ArraySet<>(); private static final Set<String> loadedModules = new CopyOnWriteArraySet<>();
synchronized public static ArraySet<String> getLoadedModules() { public static Set<String> getLoadedModules() {
return loadedModules; return loadedModules;
} }
synchronized public static void loadModules() { public static void loadModules() {
var moduleList = serviceClient.getModulesList(); var moduleList = serviceClient.getModulesList();
moduleList.forEach(module -> { moduleList.forEach(module -> {
var apk = module.apkPath; var apk = module.apkPath;
var name = module.packageName; var name = module.packageName;
var file = module.file; 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);
} }
}); });
} }