Skip to content

Commit 2a12d33

Browse files
committed
propagate transport coroutine context
1 parent 111b541 commit 2a12d33

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed

krpc/krpc-test/src/commonTest/kotlin/kotlinx/rpc/krpc/test/CoroutineContextPropagationTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class CoroutineContextPropagationTest {
3838
@Test
3939
fun test() = runTest {
4040
var actualContext: CoroutineElement? = null
41-
val transport = LocalTransport(CoroutineScope(CoroutineElement))
41+
val transport = LocalTransport(transportContext = CoroutineElement)
4242
val server = KrpcTestServer(rpcServerConfig, transport.server)
4343
val client = KrpcTestClient(rpcClientConfig, transport.client)
4444
server.registerService(Echo::class) {

krpc/krpc-test/src/commonTest/kotlin/kotlinx/rpc/krpc/test/LocalTransport.kt

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,22 @@ import kotlinx.rpc.krpc.KrpcTransport
1313
import kotlinx.rpc.krpc.KrpcTransportMessage
1414
import kotlin.coroutines.CoroutineContext
1515

16-
class LocalTransport(parentScope: CoroutineScope? = null) : CoroutineScope {
16+
class LocalTransport(
17+
parentScope: CoroutineScope? = null,
18+
transportContext: CoroutineContext? = null,
19+
) : CoroutineScope {
1720
override val coroutineContext = parentScope
18-
?.run { coroutineContext + SupervisorJob(coroutineContext.job) }
21+
?.run { SupervisorJob(coroutineContext.job) }
1922
?: SupervisorJob()
2023

2124
private val clientIncoming = Channel<KrpcTransportMessage>()
2225
private val serverIncoming = Channel<KrpcTransportMessage>()
2326

2427
val client: KrpcTransport = object : KrpcTransport {
25-
override val coroutineContext: CoroutineContext = this@LocalTransport.coroutineContext +
26-
Job(this@LocalTransport.coroutineContext.job)
28+
override val coroutineContext: CoroutineContext = Job(this@LocalTransport.coroutineContext.job).let {
29+
if(transportContext != null) transportContext + it
30+
else it
31+
}
2732

2833
override suspend fun send(message: KrpcTransportMessage) {
2934
serverIncoming.send(message)
@@ -35,8 +40,10 @@ class LocalTransport(parentScope: CoroutineScope? = null) : CoroutineScope {
3540
}
3641

3742
val server: KrpcTransport = object : KrpcTransport {
38-
override val coroutineContext: CoroutineContext = this@LocalTransport.coroutineContext +
39-
Job(this@LocalTransport.coroutineContext.job)
43+
override val coroutineContext: CoroutineContext = Job(this@LocalTransport.coroutineContext.job).let {
44+
if(transportContext != null) transportContext + it
45+
else it
46+
}
4047

4148
override suspend fun send(message: KrpcTransportMessage) {
4249
clientIncoming.send(message)

0 commit comments

Comments
 (0)