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))
+        }
     }
 }