chardev/char-win-stdio: Pass Ctrl+C to guest with a multiplexed monitor
At present when pressing Ctrl+C from a guest running on QEMU Windows with a multiplexed monitor, e.g.: -serial mon:stdio, QEMU executable just exits. This behavior is inconsistent with the Linux version. Such behavior is caused by unconditionally setting the input mode ENABLE_PROCESSED_INPUT for a console's input buffer. Fix this by testing whether the chardev is allowed to do so. Signed-off-by: Bin Meng <bin.meng@windriver.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <20221025141015.612291-1-bin.meng@windriver.com>
This commit is contained in:
parent
a082fab9d2
commit
06639f8ff5
@ -146,6 +146,8 @@ static void qemu_chr_open_stdio(Chardev *chr,
|
|||||||
bool *be_opened,
|
bool *be_opened,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
|
ChardevStdio *opts = backend->u.stdio.data;
|
||||||
|
bool stdio_allow_signal = !opts->has_signal || opts->signal;
|
||||||
WinStdioChardev *stdio = WIN_STDIO_CHARDEV(chr);
|
WinStdioChardev *stdio = WIN_STDIO_CHARDEV(chr);
|
||||||
DWORD dwMode;
|
DWORD dwMode;
|
||||||
int is_console = 0;
|
int is_console = 0;
|
||||||
@ -193,7 +195,11 @@ static void qemu_chr_open_stdio(Chardev *chr,
|
|||||||
if (is_console) {
|
if (is_console) {
|
||||||
/* set the terminal in raw mode */
|
/* set the terminal in raw mode */
|
||||||
/* ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS */
|
/* ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS */
|
||||||
dwMode |= ENABLE_PROCESSED_INPUT;
|
if (stdio_allow_signal) {
|
||||||
|
dwMode |= ENABLE_PROCESSED_INPUT;
|
||||||
|
} else {
|
||||||
|
dwMode &= ~ENABLE_PROCESSED_INPUT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SetConsoleMode(stdio->hStdIn, dwMode);
|
SetConsoleMode(stdio->hStdIn, dwMode);
|
||||||
|
Loading…
Reference in New Issue
Block a user