From f71ca64b0ac911a0358f5fc7385412d6ae7ac3ae Mon Sep 17 00:00:00 2001 From: Him188 Date: Wed, 16 Feb 2022 08:35:51 +0000 Subject: [PATCH] Cancel console instance and join when JVM shutdown, if initialized --- .../src/MiraiConsoleImplementation.kt | 9 +++++++++ .../mirai-console/src/command/BuiltInCommands.kt | 15 ++++----------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/mirai-console/backend/mirai-console/src/MiraiConsoleImplementation.kt b/mirai-console/backend/mirai-console/src/MiraiConsoleImplementation.kt index 2fbea225c..2b531a85c 100644 --- a/mirai-console/backend/mirai-console/src/MiraiConsoleImplementation.kt +++ b/mirai-console/backend/mirai-console/src/MiraiConsoleImplementation.kt @@ -43,6 +43,7 @@ import java.nio.file.Path import java.util.* import java.util.concurrent.locks.ReentrantLock import kotlin.annotation.AnnotationTarget.* +import kotlin.concurrent.thread import kotlin.coroutines.CoroutineContext @@ -356,6 +357,14 @@ public interface MiraiConsoleImplementation : CoroutineScope { override val resolvedPlugins: MutableList get() = MiraiConsole.pluginManagerImpl.resolvedPlugins } + init { + Runtime.getRuntime().addShutdownHook(thread(false) { + if (instanceInitialized) { + runBlocking { MiraiConsole.job.cancelAndJoin() } + } + }) + } + @Volatile internal var instance: MiraiConsoleImplementation? = null internal val instanceInitialized: Boolean get() = instance != null diff --git a/mirai-console/backend/mirai-console/src/command/BuiltInCommands.kt b/mirai-console/backend/mirai-console/src/command/BuiltInCommands.kt index b6895b429..a9cee6684 100644 --- a/mirai-console/backend/mirai-console/src/command/BuiltInCommands.kt +++ b/mirai-console/backend/mirai-console/src/command/BuiltInCommands.kt @@ -1,10 +1,10 @@ /* - * Copyright 2019-2021 Mamoe Technologies and contributors. + * Copyright 2019-2022 Mamoe Technologies and contributors. * - * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. - * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. + * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. + * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link. * - * https://github.com/mamoe/mirai/blob/master/LICENSE + * https://github.com/mamoe/mirai/blob/dev/LICENSE */ package net.mamoe.mirai.console.command @@ -53,7 +53,6 @@ import java.lang.management.ManagementFactory import java.lang.management.MemoryUsage import java.time.ZoneId import java.time.format.DateTimeFormatter -import kotlin.concurrent.thread import kotlin.math.floor import kotlin.system.exitProcess @@ -118,12 +117,6 @@ public object BuiltInCommands { } } - init { - Runtime.getRuntime().addShutdownHook(thread(false) { - MiraiConsole.cancel() - }) - } - public object StopCommand : SimpleCommand( ConsoleCommandOwner, "stop", "shutdown", "exit", description = "关闭 Mirai Console",