qemu-char: Permit only a single "stdio" character device

When more than one is used, the terminal settings aren't restored
correctly on exit.  Fixable.  However, such usage makes no sense,
because the users race for input, so outlaw it instead.

If you want to connect multiple things to stdio, use the mux
chardev.

Signed-off-by: Li Liu <john.liuli@huawei.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
This commit is contained in:
Li Liu 2014-09-09 19:19:48 +08:00 committed by Michael Tokarev
parent 07e2863d02
commit c88930a686

View file

@ -1017,6 +1017,7 @@ static CharDriverState *qemu_chr_open_pipe(ChardevHostdev *opts)
/* init terminal so that we can grab keys */
static struct termios oldtty;
static int old_fd0_flags;
static bool stdio_in_use;
static bool stdio_allow_signal;
static void term_exit(void)
@ -1060,8 +1061,15 @@ static CharDriverState *qemu_chr_open_stdio(ChardevStdio *opts)
error_report("cannot use stdio with -daemonize");
return NULL;
}
if (stdio_in_use) {
error_report("cannot use stdio by multiple character devices");
exit(1);
}
stdio_in_use = true;
old_fd0_flags = fcntl(0, F_GETFL);
tcgetattr (0, &oldtty);
tcgetattr(0, &oldtty);
qemu_set_nonblock(0);
atexit(term_exit);