From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Nisk7-00061K-EW for qemu-devel@nongnu.org; Sat, 20 Feb 2010 12:03:47 -0500 Received: from [199.232.76.173] (port=44842 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Nisk6-00060w-FC for qemu-devel@nongnu.org; Sat, 20 Feb 2010 12:03:46 -0500 Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1Nisk4-0000UT-Hz for qemu-devel@nongnu.org; Sat, 20 Feb 2010 12:03:46 -0500 Received: from mail-gx0-f213.google.com ([209.85.217.213]:62930) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Nisk4-0000UD-8b for qemu-devel@nongnu.org; Sat, 20 Feb 2010 12:03:44 -0500 Received: by gxk5 with SMTP id 5so1033020gxk.16 for ; Sat, 20 Feb 2010 09:03:43 -0800 (PST) Message-ID: <4B8015ED.4030300@codemonkey.ws> Date: Sat, 20 Feb 2010 11:03:41 -0600 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] terminal attributes is not restored when using /dev/tty monitor References: <20100220083052.GA3582@redhat.com> <4B7FFD5E.7010704@cisco.com> In-Reply-To: <4B7FFD5E.7010704@cisco.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "David S. Ahern" Cc: Dor Laor , Shahar Havivi , qemu-devel@nongnu.org On 02/20/2010 09:18 AM, David S. Ahern wrote: > On 02/20/2010 01:30 AM, Shahar Havivi wrote: > >> when exiting qemu that run with "-monitor /dev/tty", the launching >> terminal get weird behaviour because no restore terminals action has >> taken. >> added chr_close and register atexit() code for tty devices (like stdio >> does) >> >> Signed-off-by: Shahar Havivi >> --- >> qemu-char.c | 14 ++++++++++++++ >> 1 files changed, 14 insertions(+), 0 deletions(-) >> >> diff --git a/qemu-char.c b/qemu-char.c >> index 75dbf66..de16883 100644 >> --- a/qemu-char.c >> +++ b/qemu-char.c >> @@ -1002,6 +1002,7 @@ static void tty_serial_init(int fd, int speed, >> speed, parity, data_bits, stop_bits); >> #endif >> tcgetattr (fd,&tty); >> + oldtty = tty; >> >> #define check_speed(val) if (speed<= val) { spd = B##val; break; } >> speed = speed * 10 / 11; >> @@ -1173,6 +1174,17 @@ static int tty_serial_ioctl(CharDriverState *chr, int cmd, void *arg) >> return 0; >> } >> >> +static void tty_exit(void) >> +{ >> + tcsetattr(0, TCSANOW,&oldtty); >> +} >> + >> +static void qemu_chr_close_tty(struct CharDriverState *chr) >> +{ >> + tty_exit(); >> + fd_chr_close(chr); >> +} >> > > The close callback needs to close the fd for the device as well. I have > sent a patch to handle this; waiting for it to be included: > > http://permalink.gmane.org/gmane.comp.emulators.qemu/63472 > It didn't apply with git-am. I'm not sure why, am investigating now. Regards, Anthony Liguori > David > > > >> + >> static CharDriverState *qemu_chr_open_tty(QemuOpts *opts) >> { >> const char *filename = qemu_opt_get(opts, "path"); >> @@ -1190,6 +1202,8 @@ static CharDriverState *qemu_chr_open_tty(QemuOpts *opts) >> return NULL; >> } >> chr->chr_ioctl = tty_serial_ioctl; >> + chr->chr_close = qemu_chr_close_tty; >> + atexit(tty_exit); >> return chr; >> } >> #else /* ! __linux__&& ! __sun__ */ >> > > >