[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 continue
} }
if (nextTask.coroutine.isCancelled) continue if (nextTask.coroutine.isCompleted) continue
synchronized(queueStateChangeNoticer) { synchronized(queueStateChangeNoticer) {
@ -120,7 +120,7 @@ internal object JLineInputDaemon : Runnable {
suspendReader(true) suspendReader(true)
return@invokeOnCancellation return@invokeOnCancellation
} }
if (nnextTask2.coroutine.isCancelled) continue if (nnextTask2.coroutine.isCompleted) continue
nnextTask = nnextTask2 nnextTask = nnextTask2
break break
@ -156,6 +156,26 @@ internal object JLineInputDaemon : Runnable {
}.addLast(req) }.addLast(req)
queueStateChangeNoticer.notify() 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) tryResumeReader(true)
} }