Commit fb8829a0 authored by Him188's avatar Him188

Add lock for TemporaryPacketHandlers

parent f9daee03
package net.mamoe.mirai.network.protocol.tim
import kotlinx.coroutines.*
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.io.core.*
import net.mamoe.mirai.*
import net.mamoe.mirai.event.EventScope
......@@ -30,12 +32,15 @@ internal class TIMBotNetworkHandler internal constructor(private val bot: Bot) :
override lateinit var socket: BotSocket
internal val temporaryPacketHandlers = mutableListOf<TemporaryPacketHandler<*>>()
private val handlersLock = Mutex()
private var heartbeatJob: Job? = null
override suspend fun addHandler(temporaryPacketHandler: TemporaryPacketHandler<*>) {
handlersLock.withLock {
temporaryPacketHandlers.add(temporaryPacketHandler)
}
temporaryPacketHandler.send(this[ActionPacketHandler].session)
}
......@@ -170,9 +175,11 @@ internal class TIMBotNetworkHandler internal constructor(private val bot: Bot) :
packet.use {
//coz removeIf is not inline
handlersLock.withLock {
temporaryPacketHandlers.removeIfInlined {
it.onPacketReceived(this@TIMBotNetworkHandler[ActionPacketHandler].session, packet)
}
}
val name = packet::class.simpleName
if (name != null && !name.endsWith("Encrypted") && !name.endsWith("Raw")) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment