From b17c30853c020d49afbbff6910f9f83c63628fd7 Mon Sep 17 00:00:00 2001 From: Him188 <Him188@mamoe.net> Date: Fri, 6 Mar 2020 10:19:37 +0800 Subject: [PATCH] Cancel event listener when channel is closed --- .../kotlin/net.mamoe.mirai/event/subscribeMessages.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt index 503592fc6..61cea61ce 100644 --- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt +++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/subscribeMessages.kt @@ -11,6 +11,7 @@ package net.mamoe.mirai.event +import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.ReceiveChannel @@ -172,9 +173,12 @@ inline fun <reified E : Event> CoroutineScope.incoming( capacity: Int = Channel.UNLIMITED ): ReceiveChannel<E> { return Channel<E>(capacity).apply { - subscribeAlways<E>(coroutineContext) { + val listener = subscribeAlways<E>(coroutineContext) { send(this) } + this.invokeOnClose { + listener.cancel(CancellationException("ReceiveChannel closed", it)) + } } }