Not sure, but looks like a bug in coroutines. Simplified reproducer:
import kotlinx.coroutines.*
suspend fun main() {
(1..Runtime.getRuntime().availableProcessors()).map {
GlobalScope.async {
runBlocking {
GlobalScope.async{}.await()
}
}
}.awaitAll()
println("done")
}
If I remember correctly, Default
dispatcher uses FJP, which should automatically expand when all threads are blocked.