rocketraman
01/05/2019, 5:14 PMOutputStream
, with the stack:
"DefaultDispatcher-worker-5@10353" daemon prio=5 tid=0x69 nid=NA waiting
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Unsafe.java:-1)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:338)
at kotlinx.coroutines.io.jvm.javaio.BlockingAdapter.parkingLoop(Blocking.kt:235)
at kotlinx.coroutines.io.jvm.javaio.BlockingAdapter.submitAndAwait(Blocking.kt:215)
at kotlinx.coroutines.io.jvm.javaio.BlockingAdapter.submitAndAwait(Blocking.kt:186)
at kotlinx.coroutines.io.jvm.javaio.OutputAdapter.write(Blocking.kt:108)
- locked <merged>(a kotlinx.coroutines.io.jvm.javaio.OutputAdapter)
at java.io.OutputStream.write(OutputStream.java:75)
at [...code that writes to OutputStream...]
at io.ktor.client.engine.cio.UtilsKt.write(utils.kt:55)
at io.ktor.client.engine.cio.Endpoint$makeDedicatedRequest$1.invokeSuspend(Endpoint.kt:108)
[...]
My call to OutputStream
for testing is simply write(bytes)
where bytes is a ByteArray
.rocketraman
01/05/2019, 5:26 PMOutputStreamContent
to wrap the call in an IO dispatcher, then things work:
override suspend fun writeTo(channel: ByteWriteChannel) {
withContext(IO) {
channel.toOutputStream().use { it.body() }
}
}