From 8b3e331c5e1b4cf303d83d3364b5cd2437a44ca2 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Mon, 3 Jul 2023 13:31:34 +0800 Subject: [PATCH] Set db sync mode for Android P+ (#2597) --- .../lsposed/lspd/service/ConfigManager.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/daemon/src/main/java/org/lsposed/lspd/service/ConfigManager.java b/daemon/src/main/java/org/lsposed/lspd/service/ConfigManager.java index 0e16ecc4..a35bf8ec 100644 --- a/daemon/src/main/java/org/lsposed/lspd/service/ConfigManager.java +++ b/daemon/src/main/java/org/lsposed/lspd/service/ConfigManager.java @@ -34,6 +34,7 @@ import android.content.pm.PackageParser; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteStatement; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; @@ -91,12 +92,7 @@ import java.util.zip.ZipOutputStream; public class ConfigManager { private static ConfigManager instance = null; - private final SQLiteDatabase db = SQLiteDatabase.openDatabase( - ConfigFileManager.dbPath.getAbsolutePath(), - null, - SQLiteDatabase.CREATE_IF_NECESSARY | SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING, - sqLiteDatabase -> Log.w(TAG, "database corrupted") - ); + private final SQLiteDatabase db = openDb(); private boolean verboseLog = true; private boolean dexObfuscate = true; @@ -179,6 +175,16 @@ public class ConfigManager { private Set scopeRequestBlocked = new HashSet<>(); + private static SQLiteDatabase openDb() { + var params = new SQLiteDatabase.OpenParams.Builder() + .addOpenFlags(SQLiteDatabase.CREATE_IF_NECESSARY | SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING) + .setErrorHandler(sqLiteDatabase -> Log.w(TAG, "database corrupted")); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + params.setSynchronousMode("NORMAL"); + } + return SQLiteDatabase.openDatabase(ConfigFileManager.dbPath.getAbsoluteFile(), params.build()); + } + private void updateCaches(boolean sync) { synchronized (cacheHandler) { requestScopeCacheTime = requestModuleCacheTime = SystemClock.elapsedRealtime();