in ktor-io/jvm/src/io/ktor/utils/io/jvm/javaio/Blocking.kt [79:100]
override suspend fun loop() {
try {
while (true) {
val task = rendezvous(0)
if (task === CloseToken) {
break
} else if (task === FlushToken) {
channel.flush()
channel.closedCause?.let { throw it }
} else if (task is ByteArray) channel.writeFully(task, offset, length)
}
} catch (t: Throwable) {
if (t !is CancellationException) {
channel.close(t)
}
throw t
} finally {
if (!channel.close()) {
channel.closedCause?.let { throw it }
}
}
}