mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-17 15:12:07 -06:00
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
1 changed files with 7 additions and 1 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue