Не подтверждена Коммит 6520575b создал по автору Leonid Stashevsky's avatar Leonid Stashevsky Зафиксировано автором GitHub
Просмотр файлов

Add missing coroutineScope for the ApplicationCall (#4195)

* Add missing coroutineScope for the ApplicationCall

* Update API
владелец 2d8ea758
......@@ -25,6 +25,7 @@ kotlin.incremental.multiplatform=false
kotlin.mpp.applyDefaultHierarchyTemplate=false
kotlin.native.ignoreIncorrectDependencies=true
kotlin.apple.xcodeCompatibility.nowarn=true
kotlin.suppressGradlePluginWarnings=IncorrectCompileOnlyDependencyWarning
#kotlinx.atomicfu.enableJvmIrTransformation=true
#kotlinx.atomicfu.enableNativeIrTransformation=true
......
......@@ -22,7 +22,8 @@ internal class CIOApplicationCall(
upgraded: CompletableDeferred<Boolean>?,
remoteAddress: NetworkAddress?,
localAddress: NetworkAddress?,
) : BaseApplicationCall(application) {
override val coroutineContext: CoroutineContext
) : BaseApplicationCall(application), CoroutineScope {
override val request = CIOApplicationRequest(
this,
......
......@@ -152,7 +152,7 @@ public class CIOApplicationEngine(
}
private suspend fun ServerRequestScope.handleRequest(request: io.ktor.http.cio.Request) {
withContext(userDispatcher) {
withContext(userDispatcher) requestContext@{
val call = CIOApplicationCall(
applicationProvider(),
request,
......@@ -163,6 +163,7 @@ public class CIOApplicationEngine(
upgraded,
remoteAddress,
localAddress,
this@requestContext.coroutineContext
)
try {
......
......@@ -8,7 +8,7 @@ public final class io/ktor/server/application/Application : io/ktor/server/appli
public final fun setRootPath (Ljava/lang/String;)V
}
public abstract interface class io/ktor/server/application/ApplicationCall {
public abstract interface class io/ktor/server/application/ApplicationCall : kotlinx/coroutines/CoroutineScope {
public abstract fun getApplication ()Lio/ktor/server/application/Application;
public abstract fun getAttributes ()Lio/ktor/util/Attributes;
public abstract fun getParameters ()Lio/ktor/http/Parameters;
......@@ -1629,6 +1629,7 @@ public final class io/ktor/server/routing/RoutingBuilderKt {
public final class io/ktor/server/routing/RoutingCall : io/ktor/server/application/ApplicationCall {
public fun getApplication ()Lio/ktor/server/application/Application;
public fun getAttributes ()Lio/ktor/util/Attributes;
public fun getCoroutineContext ()Lkotlin/coroutines/CoroutineContext;
public fun getParameters ()Lio/ktor/http/Parameters;
public final fun getPathParameters ()Lio/ktor/http/Parameters;
public final fun getPipelineCall ()Lio/ktor/server/routing/RoutingPipelineCall;
......
......@@ -45,7 +45,7 @@ abstract interface <#A: out io.ktor.server.engine/ApplicationEngine, #B: io.ktor
abstract interface <#A: out kotlin/Any> io.ktor.server.application/ApplicationPlugin : io.ktor.server.application/BaseApplicationPlugin<io.ktor.server.application/Application, #A, io.ktor.server.application/PluginInstance> // io.ktor.server.application/ApplicationPlugin|null[0]
abstract interface io.ktor.server.application/ApplicationCall { // io.ktor.server.application/ApplicationCall|null[0]
abstract interface io.ktor.server.application/ApplicationCall : kotlinx.coroutines/CoroutineScope { // io.ktor.server.application/ApplicationCall|null[0]
abstract val application // io.ktor.server.application/ApplicationCall.application|{}application[0]
abstract fun <get-application>(): io.ktor.server.application/Application // io.ktor.server.application/ApplicationCall.application.<get-application>|<get-application>(){}[0]
abstract val attributes // io.ktor.server.application/ApplicationCall.attributes|{}attributes[0]
......@@ -1007,6 +1007,8 @@ final class io.ktor.server.routing/RoutingCall : io.ktor.server.application/Appl
final fun <get-application>(): io.ktor.server.application/Application // io.ktor.server.routing/RoutingCall.application.<get-application>|<get-application>(){}[0]
final val attributes // io.ktor.server.routing/RoutingCall.attributes|{}attributes[0]
final fun <get-attributes>(): io.ktor.util/Attributes // io.ktor.server.routing/RoutingCall.attributes.<get-attributes>|<get-attributes>(){}[0]
final val coroutineContext // io.ktor.server.routing/RoutingCall.coroutineContext|{}coroutineContext[0]
final fun <get-coroutineContext>(): kotlin.coroutines/CoroutineContext // io.ktor.server.routing/RoutingCall.coroutineContext.<get-coroutineContext>|<get-coroutineContext>(){}[0]
final val parameters // io.ktor.server.routing/RoutingCall.parameters|{}parameters[0]
final fun <get-parameters>(): io.ktor.http/Parameters // io.ktor.server.routing/RoutingCall.parameters.<get-parameters>|<get-parameters>(){}[0]
final val pathParameters // io.ktor.server.routing/RoutingCall.pathParameters|{}pathParameters[0]
......
......@@ -12,6 +12,8 @@ import io.ktor.server.response.*
import io.ktor.util.*
import io.ktor.util.reflect.*
import io.ktor.utils.io.*
import kotlinx.coroutines.*
import kotlin.coroutines.*
private val RECEIVE_TYPE_KEY: AttributeKey<TypeInfo> = AttributeKey("ReceiveType")
......@@ -20,7 +22,7 @@ private val RECEIVE_TYPE_KEY: AttributeKey<TypeInfo> = AttributeKey("ReceiveType
* @see [io.ktor.server.request.ApplicationRequest]
* @see [io.ktor.server.response.ApplicationResponse]
*/
public interface ApplicationCall {
public interface ApplicationCall : CoroutineScope {
/**
* [Attributes] attached to this call.
*/
......
......@@ -12,6 +12,7 @@ import io.ktor.util.*
import io.ktor.util.pipeline.*
import io.ktor.util.reflect.*
import io.ktor.utils.io.*
import kotlin.coroutines.*
/**
* Describes a node in a routing tree.
......@@ -197,6 +198,9 @@ public class RoutingCall internal constructor(
public val pipelineCall: RoutingPipelineCall
) : ApplicationCall {
override val coroutineContext: CoroutineContext
get() = pipelineCall.coroutineContext
public override lateinit var request: RoutingRequest
internal set
public override lateinit var response: RoutingResponse
......
......@@ -128,6 +128,9 @@ class ReceiveBlockingPrimitiveTest {
override val response: BaseApplicationResponse
get() = error("Shouldn't be invoked")
override val coroutineContext: CoroutineContext
get() = TODO("Not yet implemented")
fun close() {
application.dispose()
}
......
......@@ -10,6 +10,7 @@ import io.ktor.utils.io.*
import io.netty.buffer.*
import io.netty.channel.*
import io.netty.handler.codec.http.*
import kotlinx.coroutines.*
import kotlin.coroutines.*
internal class NettyHttp1ApplicationCall(
......@@ -18,8 +19,10 @@ internal class NettyHttp1ApplicationCall(
httpRequest: HttpRequest,
requestBodyChannel: ByteReadChannel?,
engineContext: CoroutineContext,
userContext: CoroutineContext
) : NettyApplicationCall(application, context, httpRequest) {
userContext: CoroutineContext,
) : NettyApplicationCall(application, context, httpRequest), CoroutineScope {
override val coroutineContext: CoroutineContext = userContext
override val request = NettyHttp1ApplicationRequest(
this,
......
......@@ -20,6 +20,8 @@ internal class NettyHttp2ApplicationCall(
userContext: CoroutineContext
) : NettyApplicationCall(application, context, headers) {
override val coroutineContext: CoroutineContext = userContext
override val request = NettyHttp2ApplicationRequest(this, engineContext, context, headers)
override val response = NettyHttp2ApplicationResponse(this, handler, context, engineContext, userContext)
......
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать