已解决 询问:key refresh job是否应该在relogin时cancel
-
粗略阅读了下Mirai的代码
在closeEverythingAndRelogin中launch的key refresh job似乎并不会被cancel
在重连时相关Content似乎也不会被close&renew
这是特意为之还是bug?
heartbeat job等似乎是手动cancel的:
QQAndroidBotNetworkHandler.kt#L121-L125override suspend fun closeEverythingAndRelogin(host: String, port: Int, cause: Throwable?, step: Int) { heartbeatJob?.cancel(CancellationException("relogin", cause)) heartbeatJob?.join() _packetReceiverJob?.cancel(CancellationException("relogin", cause)) _packetReceiverJob?.join()
key refresh job创建后没有保留对Job的引用
QQAndroidBotNetworkHandler.kt#L270-L283launch { while (isActive) { bot.client.wLoginSigInfo.sKey.run { val delay = (expireTime - creationTime).seconds - 5.minutes logger.info { "Scheduled key refresh in ${delay.toHumanReadableString()}." } delay(delay) } runCatching { refreshKeys() }.onFailure { logger.error("Failed to refresh key.", it) } } } -
感谢你发现这个问题,这个问题已经在最近的commit中修复了
-
@karlatemp 似乎没有push?
-