qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] Re: [PATCH] Use sigwait instead of sigwaitinfo.


From: Paolo Bonzini
Subject: [Qemu-devel] Re: [PATCH] Use sigwait instead of sigwaitinfo.
Date: Fri, 18 Feb 2011 15:09:11 +0100
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101209 Fedora/3.1.7-0.35.b3pre.fc14 Lightning/1.0b3pre Mnenhy/0.8.3 Thunderbird/3.1.7

On 02/18/2011 02:17 PM, Tristan Gingold wrote:
Fix compilation failure on Darwin.

Signed-off-by: Tristan Gingold<address@hidden>
---
  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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]