summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2013-02-22 17:36:38 +0100
committerJuan Quintela <quintela@redhat.com>2013-03-11 13:32:02 +0100
commit13c7b2da073ec83cb47f9582149c8d28bb038e73 (patch)
tree762b1f60b9a06871b8c04b35add77930f183c938
parentce39ee3184a02eca7f9529cc19b1582f6f704c70 (diff)
downloadfocaccia-qemu-13c7b2da073ec83cb47f9582149c8d28bb038e73.tar.gz
focaccia-qemu-13c7b2da073ec83cb47f9582149c8d28bb038e73.zip
qemu-file: check exit status when closing a pipe QEMUFile
This is what exec_close does.  Move this to the underlying QEMUFile.

Reviewed-by: Orit Wasserman <owasserm@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
-rw-r--r--include/qemu/osdep.h7
-rw-r--r--migration-exec.c4
-rw-r--r--savevm.c3
3 files changed, 10 insertions, 4 deletions
diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
index 87d3b9cfa8..df244006c7 100644
--- a/include/qemu/osdep.h
+++ b/include/qemu/osdep.h
@@ -9,6 +9,13 @@
 #include <sys/signal.h>
 #endif
 
+#ifndef _WIN32
+#include <sys/wait.h>
+#else
+#define WIFEXITED(x)   1
+#define WEXITSTATUS(x) (x)
+#endif
+
 #include <sys/time.h>
 
 #if defined(CONFIG_SOLARIS) && CONFIG_SOLARIS_VERSION < 10
diff --git a/migration-exec.c b/migration-exec.c
index 5dc73139a4..a2b5f8d729 100644
--- a/migration-exec.c
+++ b/migration-exec.c
@@ -50,10 +50,6 @@ static int exec_close(MigrationState *s)
     ret = qemu_fclose(s->opaque);
     s->opaque = NULL;
     s->fd = -1;
-    if (ret >= 0 && !(WIFEXITED(ret) && WEXITSTATUS(ret) == 0)) {
-        /* close succeeded, but non-zero exit code: */
-        ret = -EIO; /* fake errno value */
-    }
     return ret;
 }
 
diff --git a/savevm.c b/savevm.c
index 1d49fde68b..6d6f1f1ca6 100644
--- a/savevm.c
+++ b/savevm.c
@@ -247,6 +247,9 @@ static int stdio_pclose(void *opaque)
     ret = pclose(s->stdio_file);
     if (ret == -1) {
         ret = -errno;
+    } else if (!WIFEXITED(ret) || WEXITSTATUS(ret) != 0) {
+        /* close succeeded, but non-zero exit code: */
+        ret = -EIO; /* fake errno value */
     }
     g_free(s);
     return ret;