@@ -23,8 +23,7 @@ final class _CommitOrRollbackStream {
2323final class RemoteDatabase implements Database {
2424 final WorkerConnection connection;
2525 final int databaseId;
26-
27- var _isClosed = false ;
26+ final Completer <Object ?> _isClosed = Completer ();
2827
2928 StreamSubscription <Notification >? _updateNotificationSubscription;
3029 final StreamController <SqliteUpdate > _updates = StreamController .broadcast ();
@@ -33,6 +32,15 @@ final class RemoteDatabase implements Database {
3332 final _CommitOrRollbackStream _rollbacks = _CommitOrRollbackStream ();
3433
3534 RemoteDatabase ({required this .connection, required this .databaseId}) {
35+ connection.closed.then ((_) {
36+ if (! isClosed) {
37+ _isClosed.complete ();
38+ _updates.close ();
39+ _rollbacks.controller.close ();
40+ _commits.controller.close ();
41+ }
42+ });
43+
3644 _updates
3745 ..onListen = (() {
3846 _updateNotificationSubscription ?? = connection.notifications.stream
@@ -44,7 +52,7 @@ final class RemoteDatabase implements Database {
4452 }
4553 }
4654 });
47- if (! _isClosed ) {
55+ if (! isClosed ) {
4856 connection.sendRequest (
4957 newUpdateStreamRequest (
5058 action: true ,
@@ -58,7 +66,7 @@ final class RemoteDatabase implements Database {
5866 ..onCancel = (() {
5967 _updateNotificationSubscription? .cancel ();
6068 _updateNotificationSubscription = null ;
61- if (! _isClosed ) {
69+ if (! isClosed ) {
6270 connection.sendRequest (
6371 newUpdateStreamRequest (
6472 action: false ,
@@ -105,7 +113,7 @@ final class RemoteDatabase implements Database {
105113 stream.controller.add (null );
106114 }
107115 });
108- if (! _isClosed ) {
116+ if (! isClosed ) {
109117 connection.sendRequest (
110118 generateRequest (true ),
111119 MessageType .simpleSuccessResponse,
@@ -115,7 +123,7 @@ final class RemoteDatabase implements Database {
115123 ..onCancel = (() {
116124 stream.workerSubscription? .cancel ();
117125 stream.workerSubscription = null ;
118- if (! _isClosed ) {
126+ if (! isClosed ) {
119127 connection.sendRequest (
120128 generateRequest (false ),
121129 MessageType .simpleSuccessResponse,
@@ -125,27 +133,28 @@ final class RemoteDatabase implements Database {
125133 }
126134
127135 @override
128- Future <void > get closed {
129- return connection.closed;
130- }
136+ bool get isClosed => _isClosed.isCompleted;
137+
138+ @override
139+ Future <void > get closed => _isClosed.future;
131140
132141 @override
133142 Future <void > dispose () async {
134- if (_isClosed) {
135- return await closed;
143+ if (! isClosed) {
144+ _isClosed.complete (
145+ (
146+ _updates.close (),
147+ _rollbacks.controller.close (),
148+ _commits.controller.close (),
149+ connection.sendRequest (
150+ newCloseDatabase (requestId: 0 , databaseId: databaseId),
151+ MessageType .simpleSuccessResponse,
152+ ),
153+ ).wait,
154+ );
136155 }
137156
138- _isClosed = true ;
139- await (
140- _updates.close (),
141- _rollbacks.controller.close (),
142- _commits.controller.close (),
143- connection.sendRequest (
144- newCloseDatabase (requestId: 0 , databaseId: databaseId),
145- MessageType .simpleSuccessResponse,
146- ),
147- ).wait;
148- await connection.close ();
157+ return await closed;
149158 }
150159
151160 @override
0 commit comments