@@ -414,7 +414,15 @@ internal class FirebaseDataConnectImpl(
414
414
415
415
override fun close () {
416
416
logger.debug { " close() called" }
417
+ @Suppress(" DeferredResultUnused" ) closeInternal()
418
+ }
419
+
420
+ override suspend fun suspendingClose () {
421
+ logger.debug { " suspendingClose() called" }
422
+ closeInternal()?.await()
423
+ }
417
424
425
+ private fun closeInternal (): Deferred <Unit >? {
418
426
coroutineScope.cancel()
419
427
420
428
// Remove the reference to this `FirebaseDataConnect` instance from the
@@ -437,10 +445,11 @@ internal class FirebaseDataConnectImpl(
437
445
logger.debug { " close() completed successfully" }
438
446
state.update { oldState ->
439
447
check(oldState is State .Closing ) {
440
- " oldState is ${oldState} , but expected Closed (error code hsee7gfxvz)"
448
+ " oldState is ${oldState} , but expected Closing (error code hsee7gfxvz)"
441
449
}
442
450
check(oldState.closeJob == = closeJob) {
443
- " oldState.closeJob is ${oldState.closeJob} , but expected $closeJob (error code n3x86pr6qn)"
451
+ " oldState.closeJob is ${oldState.closeJob} , but expected $closeJob " +
452
+ " (error code n3x86pr6qn)"
444
453
}
445
454
State .Closed
446
455
}
@@ -461,31 +470,19 @@ internal class FirebaseDataConnectImpl(
461
470
} else {
462
471
oldState
463
472
}
464
- is State .Closed -> oldState
473
+ is State .Closed -> State . Closed
465
474
}
466
475
}
467
476
468
- if (newState is State .Closing ) {
469
- newState.closeJob.start()
470
- }
471
- }
472
-
473
- override suspend fun suspendingClose () {
474
- logger.debug { " suspendingClose() called" }
475
-
476
- close()
477
-
478
- when (val state = state.value) {
479
- is State .Initialized ->
480
- throw IllegalStateException (
481
- " state.value should be Closed or Closing, but got Initialized (error code n3x86pr6qn)"
482
- )
477
+ return when (newState) {
478
+ is State .Initialized ,
483
479
is State .New ->
484
480
throw IllegalStateException (
485
- " state.value should be Closed or Closing, but got New (error code mr6vccmvcf)"
481
+ " internal error: newState is $newState , but expected Closing or Closed " +
482
+ " (error code n3x86pr6qn)"
486
483
)
487
- is State .Closing -> state .closeJob.await()
488
- State .Closed -> {}
484
+ is State .Closing -> newState .closeJob.apply { start() }
485
+ is State .Closed -> null
489
486
}
490
487
}
491
488
0 commit comments