diff --git a/CHANGELOG.md b/CHANGELOG.md index 272587c86..9dc48ef54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,7 @@ The format is a modified version of [Keep a Changelog](https://keepachangelog.co - Fixed a crash when updating an extension while others were installing ([@AntsyLich](https://github.com/AntsyLich)) - Fixed library entries without a date added getting their last update time as date added when updating from v0.20.x ([@AntsyLich](https://github.com/AntsyLich)) - Fixed the app closing when WebView's page process crashed ([@AntsyLich](https://github.com/AntsyLich)) +- Fixed installing or updating an extension sometimes cancelling the install of another one ([@AntsyLich](https://github.com/AntsyLich)) ## [v0.21.0] - 2026-10-12 ### Added diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/installer/Installer.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/installer/Installer.kt index 134d2edab..18f9e7fa7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/installer/Installer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/installer/Installer.kt @@ -127,8 +127,10 @@ abstract class Installer(private val service: Service) { */ private fun cancelQueue(downloadId: Long) { val waitingInstall = this.waitingInstall.load() + // Every new install cancels its own previous attempt first, which mustn't hit another extension's install val toCancel = synchronized(queue) { queue.find { it.downloadId == downloadId } } - ?: waitingInstall ?: return + ?: waitingInstall?.takeIf { it.downloadId == downloadId } + ?: return if (cancelEntry(toCancel)) { queue.remove(toCancel) if (waitingInstall == toCancel) {