X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=src%2Fguestfs.c;h=fe08cb56ffee46430171e41703e108c5f240d8be;hp=d8c856a4551ab83922b0b3701d2b9be30daa5b82;hb=e35debd642bea240609775610b68145dab0a634b;hpb=dc5df3bfec706803e75a5f2454293db30e753249 diff --git a/src/guestfs.c b/src/guestfs.c index d8c856a..fe08cb5 100644 --- a/src/guestfs.c +++ b/src/guestfs.c @@ -2366,8 +2366,16 @@ accept_from_daemon (guestfs_h *g) int sock = -1; while (sock == -1) { + /* If the qemu process has died, clean up the zombie (RHBZ#579155). + * By partially polling in the select below we ensure that this + * function will be called eventually. + */ + waitpid (g->pid, NULL, WNOHANG); + rset2 = rset; - int r = select (max_fd+1, &rset2, NULL, NULL, NULL); + + struct timeval tv = { .tv_sec = 1, .tv_usec = 0 }; + int r = select (max_fd+1, &rset2, NULL, NULL, &tv); if (r == -1) { if (errno == EINTR || errno == EAGAIN) continue;