rocketraman
11/21/2018, 2:00 PMprivate val client = HttpClient(Apache) {
expectSuccess = false
install(JsonFeature) {
serializer = JacksonSerializer()
}
}
and during an upload using WriterContent
as the body, ktor hangs, and the app suspension point never resumes, with the stack:
"DefaultDispatcher-worker-1@6464" daemon prio=5 tid=0x39 nid=NA waiting
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Unsafe.java:-1)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:304)
at kotlinx.coroutines.io.jvm.javaio.BlockingAdapter.submitAndAwait(Blocking.kt:215)
at kotlinx.coroutines.io.jvm.javaio.BlockingAdapter.submitAndAwait(Blocking.kt:185)
at kotlinx.coroutines.io.jvm.javaio.OutputAdapter.write(Blocking.kt:107)
- locked <0x1ba1> (a kotlinx.coroutines.io.jvm.javaio.OutputAdapter)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:282)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)
- locked <0x1ba2> (a java.io.OutputStreamWriter)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207)
....snip....
at io.ktor.http.content.WriterContent.writeTo(WriterContent.kt:20)
at io.ktor.client.engine.apache.ApacheRequestProducer$1.invokeSuspend(ApacheRequestProducer.kt:50)
at io.ktor.client.engine.apache.ApacheRequestProducer$1.invoke(ApacheRequestProducer.kt:-1)
at kotlinx.coroutines.io.CoroutinesKt$launchChannel$job$1.invokeSuspend(Coroutines.kt:123)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:32)
at kotlinx.coroutines.DispatchedKt.resumeCancellable(Dispatched.kt:163)
at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:23)
at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:109)
at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:160)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:54)
at kotlinx.coroutines.BuildersKt.launch(Unknown Source:1)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:47)
at kotlinx.coroutines.BuildersKt.launch$default(Unknown Source:1)
at kotlinx.coroutines.io.CoroutinesKt.launchChannel(Coroutines.kt:118)
at kotlinx.coroutines.io.CoroutinesKt.writer(Coroutines.kt:82)
at io.ktor.client.engine.apache.ApacheRequestProducer.<init>(ApacheRequestProducer.kt:49)
at io.ktor.client.engine.apache.ApacheEngine.execute(ApacheEngine.kt:19)
at io.ktor.client.HttpClient$$special$$inlined$apply$lambda$1.invokeSuspend(HttpClient.kt:74)
at io.ktor.client.HttpClient$$special$$inlined$apply$lambda$1.invoke(Unknown Source:-1)
at io.ktor.util.pipeline.SuspendFunctionGun.loop(PipelineContext.kt:242)
at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(PipelineContext.kt:63)
at io.ktor.util.pipeline.SuspendFunctionGun.proceed(PipelineContext.kt:111)
at io.ktor.util.pipeline.SuspendFunctionGun.execute(PipelineContext.kt:131)
at io.ktor.util.pipeline.Pipeline.execute(Pipeline.kt:24)
[...snip...]
at io.ktor.client.HttpClient.execute(HttpClient.kt:139)
at io.ktor.client.call.HttpClientCallKt.call(HttpClientCall.kt:78)
at io.ktor.client.call.UtilsKt.call(utils.kt:25)
Same code defined with CIO.config { }
instead of Apache
works fine...