From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:40955) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UG2hn-00039e-8A for qemu-devel@nongnu.org; Thu, 14 Mar 2013 03:36:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UG2hl-0006sz-M5 for qemu-devel@nongnu.org; Thu, 14 Mar 2013 03:36:03 -0400 Received: from mx1.redhat.com ([209.132.183.28]:30973) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UG2hl-0006sq-E7 for qemu-devel@nongnu.org; Thu, 14 Mar 2013 03:36:01 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r2E7Zx9c012990 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 14 Mar 2013 03:35:59 -0400 Date: Thu, 14 Mar 2013 13:05:50 +0530 From: Amit Shah Message-ID: <20130314073550.GA10264@amit.redhat.com> References: <1363183187-16258-1-git-send-email-hdegoede@redhat.com> <1363183187-16258-3-git-send-email-hdegoede@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1363183187-16258-3-git-send-email-hdegoede@redhat.com> Subject: Re: [Qemu-devel] [PATCH 2/7] virtio-console: Remove any pending watches on close List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Hans de Goede Cc: =?iso-8859-1?Q?Marc-Andr=E9?= Lureau , qemu-devel@nongnu.org, Gerd Hoffmann On (Wed) 13 Mar 2013 [14:59:42], Hans de Goede wrote: > Signed-off-by: Hans de Goede > --- > hw/virtio-console.c | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 deletions(-) > > diff --git a/hw/virtio-console.c b/hw/virtio-console.c > index 1d87c5b..ec0f91b 100644 > --- a/hw/virtio-console.c > +++ b/hw/virtio-console.c > @@ -18,6 +18,7 @@ > typedef struct VirtConsole { > VirtIOSerialPort port; > CharDriverState *chr; > + guint watch; > } VirtConsole; > > /* > @@ -29,6 +30,7 @@ static gboolean chr_write_unblocked(GIOChannel *chan, GIOCondition cond, > { > VirtConsole *vcon = opaque; > > + vcon->watch = 0; > virtio_serial_throttle_port(&vcon->port, false); > return FALSE; > } > @@ -60,8 +62,10 @@ static ssize_t flush_buf(VirtIOSerialPort *port, const uint8_t *buf, size_t len) > ret = 0; > if (!k->is_console) { > virtio_serial_throttle_port(port, true); > - qemu_chr_fe_add_watch(vcon->chr, G_IO_OUT, chr_write_unblocked, > - vcon); > + if (!vcon->watch) { > + vcon->watch = qemu_chr_fe_add_watch(vcon->chr, G_IO_OUT, > + chr_write_unblocked, vcon); > + } > } > } > return ret; > @@ -86,6 +90,10 @@ static void guest_close(VirtIOSerialPort *port) > if (!vcon->chr) { > return; > } > + if (vcon->watch) { > + g_source_remove(vcon->watch); > + vcon->watch = 0; > + } > qemu_chr_fe_close(vcon->chr); > } Even if a guest closed the connection, we want the data the guest sent before the close to go out. What's the reason to not do that? > @@ -116,6 +124,10 @@ static void chr_event(void *opaque, int event) > virtio_serial_open(&vcon->port); > break; > case CHR_EVENT_CLOSED: > + if (vcon->watch) { > + g_source_remove(vcon->watch); > + vcon->watch = 0; > + } > virtio_serial_close(&vcon->port); > break; > } Agreed with the rest. Amit