From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O9gVp-00044D-VV for qemu-devel@nongnu.org; Wed, 05 May 2010 11:27:50 -0400 Received: from [140.186.70.92] (port=49838 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O9gVo-000426-Bt for qemu-devel@nongnu.org; Wed, 05 May 2010 11:27:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O9gVm-0001Zn-Js for qemu-devel@nongnu.org; Wed, 05 May 2010 11:27:48 -0400 Received: from david.siemens.de ([192.35.17.14]:17046) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O9gVm-0001ZN-AM for qemu-devel@nongnu.org; Wed, 05 May 2010 11:27:46 -0400 Message-ID: <4BE18E60.8070709@siemens.com> Date: Wed, 05 May 2010 17:27:28 +0200 From: Jan Kiszka MIME-Version: 1.0 References: <1271782566-16420-1-git-send-email-agraf@suse.de> <4BE024A9.2040904@codemonkey.ws> <16E7906F-F39B-4121-B540-E2F0E67D405E@suse.de> <4BE0307C.1010305@codemonkey.ws> <0D8C0E80-5325-4E50-A2EF-E73BB95AD8DA@suse.de> <4BE04A78.6070505@codemonkey.ws> <4BE05034.9060803@siemens.com> <4BE11F54.1030900@web.de> <4BE12763.8000809@web.de> In-Reply-To: <4BE12763.8000809@web.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH] char: Flush read buffer in mux_chr_can_read List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori , Alexander Graf Cc: Bastian Blank , qemu-devel Developers , Aurelien Jarno Move the buffer flush from mux_chr_read to mux_chr_can_read. While the latter is called periodically, the former will only be invoked when new characters arrive at the back-end. This caused problems to front-end drivers whenever they were unable to read data immediately, e.g. virtio-console attached to stdio. Signed-off-by: Jan Kiszka --- qemu-char.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/qemu-char.c b/qemu-char.c index ac65a1c..2b115a4 100644 --- a/qemu-char.c +++ b/qemu-char.c @@ -404,6 +404,8 @@ static int mux_chr_can_read(void *opaque) MuxDriver *d = chr->opaque; int m = d->focus; + mux_chr_accept_input(opaque); + if ((d->prod[m] - d->cons[m]) < MUX_BUFFER_SIZE) return 1; if (d->chr_can_read[m]) @@ -418,8 +420,6 @@ static void mux_chr_read(void *opaque, const uint8_t *buf, int size) int m = d->focus; int i; - mux_chr_accept_input (opaque); - for(i = 0; i < size; i++) if (mux_proc_byte(chr, d, buf[i])) { if (d->prod[m] == d->cons[m] &&