Potentially fix 'database is locked' crash

This commit is contained in:
AntsyLich
2026-03-23 20:13:39 +06:00
parent cb0e329716
commit f8e82b9322
2 changed files with 19 additions and 9 deletions
+1
View File
@@ -13,6 +13,7 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co
## [Unreleased] ## [Unreleased]
### Fixed ### Fixed
- Fix app crashing when trying to add extension repo with existing signature ([@AntsyLich](https://github.com/AntsyLich)) - 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 ## [v0.19.5] - 2026-03-20
### Changed ### Changed
@@ -7,7 +7,6 @@ import app.cash.sqldelight.db.SqlDriver
import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteConfiguration import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteConfiguration
import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteDatabaseType import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteDatabaseType
import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteDriver import com.eygraber.sqldelight.androidx.driver.AndroidxSqliteDriver
import com.eygraber.sqldelight.androidx.driver.File
import com.eygraber.sqldelight.androidx.driver.FileProvider import com.eygraber.sqldelight.androidx.driver.FileProvider
import eu.kanade.domain.track.store.DelayedTrackingStore import eu.kanade.domain.track.store.DelayedTrackingStore
import eu.kanade.tachiyomi.data.cache.ChapterCache import eu.kanade.tachiyomi.data.cache.ChapterCache
@@ -44,13 +43,21 @@ import uy.kohesive.injekt.api.InjektRegistrar
import uy.kohesive.injekt.api.addSingleton import uy.kohesive.injekt.api.addSingleton
import uy.kohesive.injekt.api.addSingletonFactory import uy.kohesive.injekt.api.addSingletonFactory
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import java.lang.ref.WeakReference
private val lock = Any()
class AppModule(val app: Application) : InjektModule { class AppModule(val app: Application) : InjektModule {
private var sqlDriverRef: WeakReference<SqlDriver>? = null
override fun InjektRegistrar.registerInjectables() { override fun InjektRegistrar.registerInjectables() {
addSingleton(app) addSingleton(app)
addSingletonFactory<SqlDriver> { addSingletonFactory<SqlDriver> {
synchronized(lock) {
sqlDriverRef?.get()?.let { return@synchronized it }
AndroidxSqliteDriver( AndroidxSqliteDriver(
driver = BundledSQLiteDriver(), driver = BundledSQLiteDriver(),
databaseType = AndroidxSqliteDatabaseType.FileProvider(app, "tachiyomi.db"), databaseType = AndroidxSqliteDatabaseType.FileProvider(app, "tachiyomi.db"),
@@ -59,6 +66,8 @@ class AppModule(val app: Application) : InjektModule {
isForeignKeyConstraintsEnabled = true, isForeignKeyConstraintsEnabled = true,
), ),
) )
.also { sqlDriverRef = WeakReference(it) }
}
} }
addSingletonFactory { addSingletonFactory {
Database( Database(