From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KGcGr-0006BK-UD for qemu-devel@nongnu.org; Wed, 09 Jul 2008 12:11:57 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KGcGq-0006AF-7N for qemu-devel@nongnu.org; Wed, 09 Jul 2008 12:11:57 -0400 Received: from [199.232.76.173] (port=38981 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KGcGq-0006A8-1D for qemu-devel@nongnu.org; Wed, 09 Jul 2008 12:11:56 -0400 Received: from mx20.gnu.org ([199.232.41.8]:48453) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KGbkX-0003IT-SH for qemu-devel@nongnu.org; Wed, 09 Jul 2008 11:38:34 -0400 Received: from mx1.redhat.com ([66.187.233.31]) by mx20.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KGYds-0007v1-8n for qemu-devel@nongnu.org; Wed, 09 Jul 2008 08:19:28 -0400 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id m69CJMGS008587 for ; Wed, 9 Jul 2008 08:19:22 -0400 From: Gerd Hoffmann Date: Wed, 9 Jul 2008 14:19:17 +0200 Message-Id: <1215605958-22623-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PATCH 1/2] unix_write: don't block on non-blocking file handles. 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 Cc: Gerd Hoffmann Signed-off-by: Gerd Hoffmann --- vl.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-) diff --git a/vl.c b/vl.c index 0e98eef..587b91c 100644 --- a/vl.c +++ b/vl.c @@ -2119,14 +2119,24 @@ void socket_set_nonblock(int fd) static int unix_write(int fd, const uint8_t *buf, int len1) { + int nonblock = fcntl(fd, F_GETFL) & O_NONBLOCK; int ret, len; len = len1; while (len > 0) { ret = write(fd, buf, len); if (ret < 0) { - if (errno != EINTR && errno != EAGAIN) + if (errno == EINTR) { + continue; + } else if (errno == EAGAIN) { + if (!nonblock) + continue; + if (len1 != len) + break; /* partial write, return written bytes */ + return -1; + } else { return -1; + } } else if (ret == 0) { break; } else { -- 1.5.4.1