From 427ab275d16ec7e8304bc8df6e1868e3f9dc03ad Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Tue, 28 Jul 2026 11:48:56 +0200 Subject: [PATCH] Allow calling `disconnect()` on closed databases --- packages/powersync/CHANGELOG.md | 1 + .../lib/src/database/powersync_database.dart | 4 +++- packages/powersync/test/sync/in_memory_sync_test.dart | 11 +++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/powersync/CHANGELOG.md b/packages/powersync/CHANGELOG.md index 3f91f2c3..4531c04e 100644 --- a/packages/powersync/CHANGELOG.md +++ b/packages/powersync/CHANGELOG.md @@ -1,5 +1,6 @@ ## 2.3.3 +- Restore the ability to call `disconnect()` on closed databases. - Internal: Update PowerSync SQLite core extension to latest version. ## 2.3.2 diff --git a/packages/powersync/lib/src/database/powersync_database.dart b/packages/powersync/lib/src/database/powersync_database.dart index 81609325..ea034dd0 100644 --- a/packages/powersync/lib/src/database/powersync_database.dart +++ b/packages/powersync/lib/src/database/powersync_database.dart @@ -339,7 +339,9 @@ abstract base class PowerSyncDatabase extends SqliteConnection { /// /// Use [connect] to connect again. Future disconnect() async { - await _connections.disconnect(); + if (!database.closed) { + await _connections.disconnect(); + } } /// Disconnect and clear the database. diff --git a/packages/powersync/test/sync/in_memory_sync_test.dart b/packages/powersync/test/sync/in_memory_sync_test.dart index 1154500e..6a3f2469 100644 --- a/packages/powersync/test/sync/in_memory_sync_test.dart +++ b/packages/powersync/test/sync/in_memory_sync_test.dart @@ -988,5 +988,16 @@ void _declareTests(String name, SyncOptions options, bool bson) { expect(database.currentStatus.anyError, isNull); }); }); + + test('can call disconnect on closed database', () async { + // Regression test for https://github.com/powersync-ja/powersync.dart/issues/448, + // calling disconnect() on a closed database should be a harmless no-op. + final status = await waitForConnection(); + await database.close(); + await expectLater(status, emitsThrough(isSyncStatus(connected: false))); + await expectLater(status, emitsDone); + + await database.disconnect(); + }); }); }