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