From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=34453 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PqR1I-0004GI-ID for qemu-devel@nongnu.org; Fri, 18 Feb 2011 09:09:17 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PqR1H-0004FQ-FI for qemu-devel@nongnu.org; Fri, 18 Feb 2011 09:09:16 -0500 Received: from mail-ey0-f174.google.com ([209.85.215.174]:36637) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PqR1H-0004FI-80 for qemu-devel@nongnu.org; Fri, 18 Feb 2011 09:09:15 -0500 Received: by eye27 with SMTP id 27so1870178eye.33 for ; Fri, 18 Feb 2011 06:09:14 -0800 (PST) Sender: Paolo Bonzini Message-ID: <4D5E7D87.6010000@redhat.com> Date: Fri, 18 Feb 2011 15:09:11 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <1297959841-41235-1-git-send-email-gingold@adacore.com> <1298035036-51807-1-git-send-email-gingold@adacore.com> In-Reply-To: <1298035036-51807-1-git-send-email-gingold@adacore.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: [PATCH] Use sigwait instead of sigwaitinfo. List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Tristan Gingold Cc: qemu-devel@nongnu.org On 02/18/2011 02:17 PM, Tristan Gingold wrote: > Fix compilation failure on Darwin. > > Signed-off-by: Tristan Gingold > --- > compatfd.c | 36 ++++++++++++++++++------------------ > 1 files changed, 18 insertions(+), 18 deletions(-) > > diff --git a/compatfd.c b/compatfd.c > index a7cebc4..bd377c4 100644 > --- a/compatfd.c > +++ b/compatfd.c > @@ -26,45 +26,45 @@ struct sigfd_compat_info > static void *sigwait_compat(void *opaque) > { > struct sigfd_compat_info *info = opaque; > - int err; > sigset_t all; > > sigfillset(&all); > sigprocmask(SIG_BLOCK,&all, NULL); > > - do { > - siginfo_t siginfo; > + while (1) { > + int sig; > + int err; > > - err = sigwaitinfo(&info->mask,&siginfo); > - if (err == -1&& errno == EINTR) { > - err = 0; > - continue; > - } > - > - if (err> 0) { > - char buffer[128]; > + err = sigwait(&info->mask,&sig); > + if (err != 0) { > + if (errno == EINTR) { > + continue; > + } else { > + return NULL; > + } > + } else { > + struct qemu_signalfd_siginfo buffer; > size_t offset = 0; > > - memcpy(buffer,&err, sizeof(err)); > + memset(&buffer, 0, sizeof(buffer)); > + buffer.ssi_signo = sig; > + > while (offset< sizeof(buffer)) { > ssize_t len; > > - len = write(info->fd, buffer + offset, > + len = write(info->fd, (char *)&buffer + offset, > sizeof(buffer) - offset); > if (len == -1&& errno == EINTR) > continue; > > if (len<= 0) { > - err = -1; > - break; > + return NULL; > } > > offset += len; > } > } > - } while (err>= 0); > - > - return NULL; > + } > } > > static int qemu_signalfd_compat(const sigset_t *mask) Looks good. Paolo