X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=src%2Fguestfs.c;h=20afb633ee37fbab973a8647f29e6644e7cf50af;hp=58a035440607432eea09dfb90db3099e96fc2a5f;hb=41f8b506924243d4fd7570913fbbbd9f8040e11f;hpb=ab8edb0cf9a23ee4a1655ad3a26a0cff7d61ac3d diff --git a/src/guestfs.c b/src/guestfs.c index 58a0354..20afb63 100644 --- a/src/guestfs.c +++ b/src/guestfs.c @@ -19,7 +19,6 @@ #include #define _BSD_SOURCE /* for mkdtemp, usleep */ -#define _GNU_SOURCE /* for vasprintf, GNU strerror_r, strchrnul */ #include #include @@ -348,6 +347,10 @@ guestfs_close (guestfs_h *g) g->fd[1] = -1; g->sock = -1; + /* Wait for subprocess(es) to exit. */ + waitpid (g->pid, NULL, 0); + if (g->recoverypid > 0) waitpid (g->recoverypid, NULL, 0); + /* Remove tmpfiles. */ if (g->tmpdir) { snprintf (filename, sizeof filename, "%s/sock", g->tmpdir); @@ -1165,16 +1168,16 @@ guestfs_launch (guestfs_h *g) close (wfd[1]); close (rfd[0]); - int fail = 0; - fail |= dup (wfd[0]); - fail |= dup (rfd[1]); - close (wfd[0]); - close (rfd[1]); - - if (fail) { + if (dup (wfd[0]) == -1) { + dup_failed: perror ("dup failed"); _exit (1); } + if (dup (rfd[1]) == -1) + goto dup_failed; + + close (wfd[0]); + close (rfd[1]); #if 0 /* Set up a new process group, so we can signal this process @@ -2410,7 +2413,7 @@ guestfs__receive_file_sync (guestfs_h *g, const char *filename) return -1; } - while ((r = receive_file_data_sync (g, NULL, NULL)) > 0) + while (receive_file_data_sync (g, NULL, NULL) > 0) ; /* just discard it */ return -1;