diff --git a/src/input_common.cpp b/src/input_common.cpp index fb82b1842..dc89f2b75 100644 --- a/src/input_common.cpp +++ b/src/input_common.cpp @@ -134,13 +134,6 @@ static char_event_t readb() { } } - if (ioport > 0 && FD_ISSET(ioport, &fdset)) { - iothread_service_completion(); - if (auto mc = s_lookahead->pop_evt()) { - return *mc; - } - } - if (FD_ISSET(STDIN_FILENO, &fdset)) { unsigned char arr[1]; if (read_blocked(0, arr, 1) != 1) { @@ -151,6 +144,15 @@ static char_event_t readb() { // We read from stdin, so don't loop. return arr[0]; } + + // Check for iothread completions only if there is no data to be read from the stdin. + // This gives priority to the foreground. + if (ioport > 0 && FD_ISSET(ioport, &fdset)) { + iothread_service_completion(); + if (auto mc = s_lookahead->pop_evt()) { + return *mc; + } + } } } }