diff --git a/.changes/065e6349-8e2a-403b-b588-067161f260fd.json b/.changes/065e6349-8e2a-403b-b588-067161f260fd.json new file mode 100644 index 0000000000..80a6796004 --- /dev/null +++ b/.changes/065e6349-8e2a-403b-b588-067161f260fd.json @@ -0,0 +1,5 @@ +{ + "id": "065e6349-8e2a-403b-b588-067161f260fd", + "type": "bugfix", + "description": "Correctly handle sequential calls to `SingleFlightGroup`" +} \ No newline at end of file diff --git a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/util/SingleFlightGroup.kt b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/util/SingleFlightGroup.kt index 6234d20733..5f36f3a4ae 100644 --- a/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/util/SingleFlightGroup.kt +++ b/runtime/runtime-core/common/src/aws/smithy/kotlin/runtime/util/SingleFlightGroup.kt @@ -30,7 +30,7 @@ public class SingleFlightGroup { public suspend fun singleFlight(block: suspend () -> T): T { mu.lock() val job = inFlight - if (job != null) { + if (job?.isActive == true) { waitCount++ mu.unlock() diff --git a/runtime/runtime-core/common/test/aws/smithy/kotlin/runtime/util/SingleFlightGroupTest.kt b/runtime/runtime-core/common/test/aws/smithy/kotlin/runtime/util/SingleFlightGroupTest.kt index cfe9d626fb..f468889d7b 100644 --- a/runtime/runtime-core/common/test/aws/smithy/kotlin/runtime/util/SingleFlightGroupTest.kt +++ b/runtime/runtime-core/common/test/aws/smithy/kotlin/runtime/util/SingleFlightGroupTest.kt @@ -109,4 +109,14 @@ class SingleFlightGroupTest { } } } + + @Test + fun testSequential() = runTest { + val group = SingleFlightGroup() + val first = group.singleFlight { "Foo" } + assertEquals("Foo", first) + + val second = group.singleFlight { "Bar" } + assertEquals("Bar", second) + } }