Преглед на файлове

Fix event concurrency for Java callers

Him188 преди 5 години
родител
ревизия
6a726050bc
променени са 1 файла, в които са добавени 4 реда и са изтрити 3 реда
  1. 4 3
      mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/internal/InternalEventListeners.kt

+ 4 - 3
mirai-core/src/commonMain/kotlin/net.mamoe.mirai/event/internal/InternalEventListeners.kt

@@ -56,11 +56,12 @@ internal fun <E : Event> CoroutineScope.Handler(
 internal class Handler<in E : Event>
 @PublishedApi internal constructor(
     parentJob: Job?,
-    private val subscriberContext: CoroutineContext,
+    subscriberContext: CoroutineContext,
     @JvmField val handler: suspend (E) -> ListeningStatus,
     override val concurrencyKind: Listener.ConcurrencyKind
-) :
-    Listener<E>, CompletableJob by Job(parentJob) {
+) : Listener<E>, CompletableJob by SupervisorJob(parentJob) { // avoid being cancelled on handling event
+
+    private val subscriberContext: CoroutineContext = subscriberContext + this // override Job.
 
     @MiraiInternalAPI
     val lock: Mutex? = when (concurrencyKind) {