From 59accbf32ad88278c265f286496b29cbcc96e523 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 8 Sep 2025 14:18:13 -0500 Subject: [PATCH] fix: prevent isolate deadlock (#21692) --- .../services/background_worker.service.dart | 15 ++++++++++----- .../repositories/db.repository.dart | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/mobile/lib/domain/services/background_worker.service.dart b/mobile/lib/domain/services/background_worker.service.dart index 9f366ad30b..b3d97e0938 100644 --- a/mobile/lib/domain/services/background_worker.service.dart +++ b/mobile/lib/domain/services/background_worker.service.dart @@ -169,15 +169,20 @@ class BackgroundWorkerBgService extends BackgroundWorkerFlutterApi { try { _isCleanedUp = true; _logger.info("Cleaning up background worker"); - await _ref.read(backgroundSyncProvider).cancel(); - await _ref.read(backgroundSyncProvider).cancelLocal(); + final cleanupFutures = [ + _drift.close(), + _driftLogger.close(), + _ref.read(backgroundSyncProvider).cancel(), + _ref.read(backgroundSyncProvider).cancelLocal(), + ]; + if (_isar.isOpen) { - await _isar.close(); + cleanupFutures.add(_isar.close()); } - await _drift.close(); - await _driftLogger.close(); _ref.dispose(); _lockManager.releaseLock(); + + await Future.wait(cleanupFutures); _logger.info("Background worker resources cleaned up"); } catch (error, stack) { debugPrint('Failed to cleanup background worker: $error with stack: $stack'); diff --git a/mobile/lib/infrastructure/repositories/db.repository.dart b/mobile/lib/infrastructure/repositories/db.repository.dart index 2a3eb4e3b7..028fbda403 100644 --- a/mobile/lib/infrastructure/repositories/db.repository.dart +++ b/mobile/lib/infrastructure/repositories/db.repository.dart @@ -148,7 +148,7 @@ class Drift extends $Drift implements IDatabaseRepository { await customStatement('PRAGMA foreign_keys = ON'); await customStatement('PRAGMA synchronous = NORMAL'); await customStatement('PRAGMA journal_mode = WAL'); - await customStatement('PRAGMA busy_timeout = 500'); + await customStatement('PRAGMA busy_timeout = 30000'); }, ); }