From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=35097 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OPASI-00067L-FE for qemu-devel@nongnu.org; Thu, 17 Jun 2010 04:28:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OPASG-0004n0-KT for qemu-devel@nongnu.org; Thu, 17 Jun 2010 04:28:10 -0400 Received: from mx1.redhat.com ([209.132.183.28]:1025) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OPASG-0004mr-Cd for qemu-devel@nongnu.org; Thu, 17 Jun 2010 04:28:08 -0400 Message-ID: <4C19DC88.4080208@redhat.com> Date: Thu, 17 Jun 2010 10:27:52 +0200 From: Kevin Wolf MIME-Version: 1.0 Subject: Re: [Qemu-devel] Re: [PATCH 1/2] qemu-io: retry fgets() when errno is EINTR References: <1276624421-23999-1-git-send-email-morita.kazutaka@lab.ntt.co.jp> <1276624421-23999-2-git-send-email-morita.kazutaka@lab.ntt.co.jp> <4C18AFCF.2000304@redhat.com> <87pqzqgbsw.wl%morita.kazutaka@lab.ntt.co.jp> In-Reply-To: <87pqzqgbsw.wl%morita.kazutaka@lab.ntt.co.jp> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: MORITA Kazutaka Cc: qemu-devel@nongnu.org Am 16.06.2010 18:52, schrieb MORITA Kazutaka: > At Wed, 16 Jun 2010 13:04:47 +0200, > Kevin Wolf wrote: >> >> Am 15.06.2010 19:53, schrieb MORITA Kazutaka: >>> posix-aio-compat sends a signal in aio operations, so we should >>> consider that fgets() could be interrupted here. >>> >>> Signed-off-by: MORITA Kazutaka >>> --- >>> cmd.c | 3 +++ >>> 1 files changed, 3 insertions(+), 0 deletions(-) >>> >>> diff --git a/cmd.c b/cmd.c >>> index 2336334..460df92 100644 >>> --- a/cmd.c >>> +++ b/cmd.c >>> @@ -272,7 +272,10 @@ fetchline(void) >>> return NULL; >>> printf("%s", get_prompt()); >>> fflush(stdout); >>> +again: >>> if (!fgets(line, MAXREADLINESZ, stdin)) { >>> + if (errno == EINTR) >>> + goto again; >>> free(line); >>> return NULL; >>> } >> >> This looks like a loop replaced by goto (and braces are missing). What >> about this instead? >> >> do { >> ret = fgets(...) >> } while (ret == NULL && errno == EINTR) >> >> if (ret == NULL) { >> fail >> } >> > > I agree. > > However, it seems that my second patch have already solved the > problem. We register this readline routines as an aio handler now, so > fgets() does not block and cannot return with EINTR. > > This patch looks no longer needed, sorry. Good point. Thanks for having a look. Kevin