@@ -72,7 +72,7 @@ class _ConnectedClient {
7272 request.crudThrottleTimeMs, request.syncParamsEncoded, this );
7373 return (JSObject (), null );
7474 case SyncWorkerMessageType .abortSynchronization:
75- _runner? .unregisterClient (this );
75+ _runner? .disconnectClient (this );
7676 _runner = null ;
7777 return (JSObject (), null );
7878 default :
@@ -155,6 +155,10 @@ class _SyncRunner {
155155 await sync ? .abort ();
156156 sync = null ;
157157 }
158+ case _DisconnectClient (: final client):
159+ connections.remove (client);
160+ await sync ? .abort ();
161+ sync = null ;
158162 case _ActiveDatabaseClosed ():
159163 _logger.info ('Remote database closed, finding a new client' );
160164 sync ? .abort ();
@@ -279,9 +283,15 @@ class _SyncRunner {
279283 client, currentCrudThrottleTimeMs, currentSyncParamsEncoded));
280284 }
281285
286+ /// Remove a client, disconnecting if no clients remain..
282287 void unregisterClient (_ConnectedClient client) {
283288 _mainEvents.add (_RemoveConnection (client));
284289 }
290+
291+ /// Remove a client, and immediately disconnect.
292+ void disconnectClient (_ConnectedClient client) {
293+ _mainEvents.add (_DisconnectClient (client));
294+ }
285295}
286296
287297sealed class _RunnerEvent {}
@@ -300,6 +310,12 @@ final class _RemoveConnection implements _RunnerEvent {
300310 _RemoveConnection (this .client);
301311}
302312
313+ final class _DisconnectClient implements _RunnerEvent {
314+ final _ConnectedClient client;
315+
316+ _DisconnectClient (this .client);
317+ }
318+
303319final class _ActiveDatabaseClosed implements _RunnerEvent {
304320 const _ActiveDatabaseClosed ();
305321}
0 commit comments