From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Lncqx-00083V-Mb for qemu-devel@nongnu.org; Sat, 28 Mar 2009 14:01:55 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Lncqr-0007xA-Ju for qemu-devel@nongnu.org; Sat, 28 Mar 2009 14:01:53 -0400 Received: from [199.232.76.173] (port=48077 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Lncqr-0007wj-9g for qemu-devel@nongnu.org; Sat, 28 Mar 2009 14:01:49 -0400 Received: from e8.ny.us.ibm.com ([32.97.182.138]:53793) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Lncqq-0002VC-NK for qemu-devel@nongnu.org; Sat, 28 Mar 2009 14:01:48 -0400 Received: from d01relay02.pok.ibm.com (d01relay02.pok.ibm.com [9.56.227.234]) by e8.ny.us.ibm.com (8.13.1/8.13.1) with ESMTP id n2SHrT8p027114 for ; Sat, 28 Mar 2009 13:53:29 -0400 Received: from d01av01.pok.ibm.com (d01av01.pok.ibm.com [9.56.224.215]) by d01relay02.pok.ibm.com (8.13.8/8.13.8/NCO v9.2) with ESMTP id n2SI1lRU196944 for ; Sat, 28 Mar 2009 14:01:47 -0400 Received: from d01av01.pok.ibm.com (loopback [127.0.0.1]) by d01av01.pok.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id n2SI1l4W028144 for ; Sat, 28 Mar 2009 14:01:47 -0400 Received: from squirrel.codemonkey.ws (sig-9-65-67-103.mts.ibm.com [9.65.67.103]) by d01av01.pok.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id n2SI1lGS028131 for ; Sat, 28 Mar 2009 14:01:47 -0400 Message-ID: <49CE660A.9000103@us.ibm.com> Date: Sat, 28 Mar 2009 13:01:46 -0500 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [STABLE][PATCH] char: Fix closing of various char devices References: <49C0D3B9.8050300@siemens.com> In-Reply-To: <49C0D3B9.8050300@siemens.com> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Jan Kiszka wrote: > This patch fixes several issues around closing char devices. Affected > were pty (timer was left behind, even running), udp (no close handling > at all) and tcp (missing async IO handler cleanup). The bugs either > caused segfaults or stalled the qemu process. So far, hot-unplugging USB > serial adapters suffered from this. > > Signed-off-by: Jan Kiszka > Applied to trunk and stable. Thanks. Regards, Anthony Liguori > --- > > qemu-char.c | 21 +++++++++++++++++++-- > 1 files changed, 19 insertions(+), 2 deletions(-) > > diff --git a/qemu-char.c b/qemu-char.c > index c92507b..7a852b7 100644 > --- a/qemu-char.c > +++ b/qemu-char.c > @@ -929,6 +929,8 @@ static void pty_chr_close(struct CharDriverState *chr) > > qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL); > close(s->fd); > + qemu_del_timer(s->timer); > + qemu_free_timer(s->timer); > qemu_free(s); > } > > @@ -1758,6 +1760,16 @@ static void udp_chr_update_read_handler(CharDriverState *chr) > } > } > > +static void udp_chr_close(CharDriverState *chr) > +{ > + NetCharDriver *s = chr->opaque; > + if (s->fd >= 0) { > + qemu_set_fd_handler(s->fd, NULL, NULL, NULL); > + closesocket(s->fd); > + } > + qemu_free(s); > +} > + > static CharDriverState *qemu_chr_open_udp(const char *def) > { > CharDriverState *chr = NULL; > @@ -1791,6 +1803,7 @@ static CharDriverState *qemu_chr_open_udp(const char *def) > chr->opaque = s; > chr->chr_write = udp_chr_write; > chr->chr_update_read_handler = udp_chr_update_read_handler; > + chr->chr_close = udp_chr_close; > return chr; > > return_err: > @@ -1993,10 +2006,14 @@ static void tcp_chr_accept(void *opaque) > static void tcp_chr_close(CharDriverState *chr) > { > TCPCharDriver *s = chr->opaque; > - if (s->fd >= 0) > + if (s->fd >= 0) { > + qemu_set_fd_handler(s->fd, NULL, NULL, NULL); > closesocket(s->fd); > - if (s->listen_fd >= 0) > + } > + if (s->listen_fd >= 0) { > + qemu_set_fd_handler(s->listen_fd, NULL, NULL, NULL); > closesocket(s->listen_fd); > + } > qemu_free(s); > } > > > > >