@@ -414,7 +414,15 @@ internal class FirebaseDataConnectImpl(
414414
415415 override fun close () {
416416 logger.debug { " close() called" }
417+ @Suppress(" DeferredResultUnused" ) closeInternal()
418+ }
419+
420+ override suspend fun suspendingClose () {
421+ logger.debug { " suspendingClose() called" }
422+ closeInternal()?.await()
423+ }
417424
425+ private fun closeInternal (): Deferred <Unit >? {
418426 coroutineScope.cancel()
419427
420428 // Remove the reference to this `FirebaseDataConnect` instance from the
@@ -437,10 +445,11 @@ internal class FirebaseDataConnectImpl(
437445 logger.debug { " close() completed successfully" }
438446 state.update { oldState ->
439447 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)"
441449 }
442450 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)"
444453 }
445454 State .Closed
446455 }
@@ -461,31 +470,19 @@ internal class FirebaseDataConnectImpl(
461470 } else {
462471 oldState
463472 }
464- is State .Closed -> oldState
473+ is State .Closed -> State . Closed
465474 }
466475 }
467476
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 ,
483479 is State .New ->
484480 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)"
486483 )
487- is State .Closing -> state .closeJob.await()
488- State .Closed -> {}
484+ is State .Closing -> newState .closeJob.apply { start() }
485+ is State .Closed -> null
489486 }
490487 }
491488
0 commit comments