From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NisgC-00050u-1x for qemu-devel@nongnu.org; Sat, 20 Feb 2010 11:59:44 -0500 Received: from [199.232.76.173] (port=40087 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NisgA-00050l-Vg for qemu-devel@nongnu.org; Sat, 20 Feb 2010 11:59:43 -0500 Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1Nisg7-0007vG-RG for qemu-devel@nongnu.org; Sat, 20 Feb 2010 11:59:42 -0500 Received: from mx1.redhat.com ([209.132.183.28]:49164) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Nisg7-0007uu-E2 for qemu-devel@nongnu.org; Sat, 20 Feb 2010 11:59:39 -0500 Date: Sat, 20 Feb 2010 18:59:36 +0200 From: Shahar Havivi Subject: Re: [Qemu-devel] [PATCH] terminal attributes is not restored when using /dev/tty monitor Message-ID: <20100220165935.GA9999@redhat.com> References: <20100220083052.GA3582@redhat.com> <4B7FFD5E.7010704@cisco.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4B7FFD5E.7010704@cisco.com> List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "David S. Ahern" Cc: Dor Laor , qemu-devel@nongnu.org On Sat, Feb 20, 2010 at 08:18:54AM -0700, David S. Ahern wrote: > Date: Sat, 20 Feb 2010 08:18:54 -0700 > From: "David S. Ahern" > To: Shahar Havivi > CC: qemu-devel@nongnu.org, Dor Laor > Subject: Re: [Qemu-devel] [PATCH] terminal attributes is not restored when > using /dev/tty monitor > > > 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 > > David Sure you right about the fd but the chr->chr_close not called all the time that is why I added the atexit() call, and the restore tty flags. Shaahr. > > > > + > > 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__ */