[console/terminal] Fix input queue blocked when previous request was cancelled

This commit is contained in:
Karlatemp 2023-07-17 07:24:23 +08:00
parent 6e7dcadcf9
commit 3763996590
No known key found for this signature in database
GPG Key ID: BA173CA2B9956C59

View File

@ -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)
}