From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57017) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XTluh-0004YO-8U for qemu-devel@nongnu.org; Tue, 16 Sep 2014 02:06:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XTluc-0001NE-RF for qemu-devel@nongnu.org; Tue, 16 Sep 2014 02:06:55 -0400 Received: from mx1.redhat.com ([209.132.183.28]:28271) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XTluc-0001L2-IB for qemu-devel@nongnu.org; Tue, 16 Sep 2014 02:06:50 -0400 From: Markus Armbruster References: <1410092666-17405-1-git-send-email-zifeitong@gmail.com> Date: Tue, 16 Sep 2014 08:06:36 +0200 In-Reply-To: <1410092666-17405-1-git-send-email-zifeitong@gmail.com> (Zifei Tong's message of "Sun, 7 Sep 2014 20:24:26 +0800") Message-ID: <874mw8yu8j.fsf@blackfin.pond.sub.org> MIME-Version: 1.0 Content-Type: text/plain Subject: Re: [Qemu-devel] [PATCH] qemu-char: Do not disconnect when there's data for reading List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Zifei Tong Cc: Gerd Hoffmann , Nikolay Nikolaev , qemu-devel@nongnu.org, Anthony Liguori , Kirill Batuzov Cc'ing Gerd for additional chardev expertise. Zifei Tong writes: > After commit 812c1057f6175ac9a9829fa2920a2b5783814193 (Handle G_IO_HUP > in tcp_chr_read for tcp chardev), the connection is disconnected when in > G_IO_HUP condition. > > However, it's possible that the channel is in G_IO_IN condition at the > same time, meaning there is data for reading. In that case, the > remaining data is not handled. > > I saw a related bug when running socat in write-only mode, with > > $ echo "quit" | socat -u - UNIX-CONNECT:qemu-monitor > > the monitor won't not run the 'quit' command. Reproduced. Is this a regression caused by command 812c105? > CC: Kirill Batuzov > CC: Nikolay Nikolaev > CC: Anthony Liguori > Signed-off-by: Zifei Tong > --- > qemu-char.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/qemu-char.c b/qemu-char.c > index 1a8d9aa..5018c3a 100644 > --- a/qemu-char.c > +++ b/qemu-char.c > @@ -2706,7 +2706,7 @@ static gboolean tcp_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque) > uint8_t buf[READ_BUF_LEN]; > int len, size; > > - if (cond & G_IO_HUP) { > + if (!(cond & G_IO_IN) && (cond & G_IO_HUP)) { > /* connection closed */ > tcp_chr_disconnect(chr); > return TRUE; Kirill, you added the code being changed. Could you review the patch?