diff --git a/mirai-console/frontend/mirai-console-terminal/src/JLineInputDaemon.kt b/mirai-console/frontend/mirai-console-terminal/src/JLineInputDaemon.kt index 365007139..46cb54f16 100644 --- a/mirai-console/frontend/mirai-console-terminal/src/JLineInputDaemon.kt +++ b/mirai-console/frontend/mirai-console-terminal/src/JLineInputDaemon.kt @@ -69,7 +69,7 @@ internal object JLineInputDaemon : Runnable { } continue } - if (nextTask.coroutine.isCancelled) continue + if (nextTask.coroutine.isCompleted) continue synchronized(queueStateChangeNoticer) { @@ -120,7 +120,7 @@ internal object JLineInputDaemon : Runnable { suspendReader(true) return@invokeOnCancellation } - if (nnextTask2.coroutine.isCancelled) continue + if (nnextTask2.coroutine.isCompleted) continue nnextTask = nnextTask2 break @@ -156,6 +156,26 @@ internal object JLineInputDaemon : Runnable { }.addLast(req) queueStateChangeNoticer.notify() + + if (crtProcessing != null && crtProcessing.coroutine.isCompleted) { + val nnextTask: Request + while (true) { + val nnextTask2 = queue.poll() ?: queueDelayable.poll() + if (nnextTask2 == null) { + nnextTask = req + break + } + if (nnextTask2.coroutine.isCompleted) continue + + nnextTask = nnextTask2 + break + } + processing = nnextTask + updateFlags(nnextTask) + if (lineReader.isReading) { + readerImpl.redisplay() + } + } } tryResumeReader(true) }