diff --git a/CHANGELOG.md b/CHANGELOG.md index 8040c4ec9..efc5ff8f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co ## [Unreleased] ### Fixed - Fix app crashing when trying to add extension repo with existing signature ([@AntsyLich](https://github.com/AntsyLich)) +- Potentially fix 'database is locked' crash ([@AntsyLich](https://github.com/AntsyLich)) ## [v0.19.5] - 2026-03-20 ### Changed diff --git a/app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt b/app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt index c243d9568..59f1a2c25 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/di/AppModule.kt @@ -7,7 +7,6 @@ import app.cash.sqldelight.db.SqlDriver import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteConfiguration import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteDatabaseType import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteDriver -import com.eygraber.sqldelight.androidx.driver.File import com.eygraber.sqldelight.androidx.driver.FileProvider import eu.kanade.domain.track.store.DelayedTrackingStore import eu.kanade.tachiyomi.data.cache.ChapterCache @@ -44,21 +43,31 @@ import uy.kohesive.injekt.api.InjektRegistrar import uy.kohesive.injekt.api.addSingleton import uy.kohesive.injekt.api.addSingletonFactory import uy.kohesive.injekt.api.get +import java.lang.ref.WeakReference + +private val lock = Any() class AppModule(val app: Application) : InjektModule { + private var sqlDriverRef: WeakReference? = null + override fun InjektRegistrar.registerInjectables() { addSingleton(app) addSingletonFactory { - AndroidxSqliteDriver( - driver = BundledSQLiteDriver(), - databaseType = AndroidxSqliteDatabaseType.FileProvider(app, "tachiyomi.db"), - schema = Database.Schema, - configuration = AndroidxSqliteConfiguration( - isForeignKeyConstraintsEnabled = true, - ), - ) + synchronized(lock) { + sqlDriverRef?.get()?.let { return@synchronized it } + + AndroidxSqliteDriver( + driver = BundledSQLiteDriver(), + databaseType = AndroidxSqliteDatabaseType.FileProvider(app, "tachiyomi.db"), + schema = Database.Schema, + configuration = AndroidxSqliteConfiguration( + isForeignKeyConstraintsEnabled = true, + ), + ) + .also { sqlDriverRef = WeakReference(it) } + } } addSingletonFactory { Database(