On Tue, Mar 22, 2011 at 04:45:09PM -0600, Eric Blake wrote:
Sometimes, an asynchronous helper is started (such as a compressor
or iohelper program), but a later error means that we want to
abort that child. Make this easier.
/*
@@ -1207,6 +1208,8 @@ virCommandRunAsync(virCommandPtr cmd, pid_t *pid)
if (ret == 0 && pid)
*pid = cmd->pid;
+ else
+ cmd->reap = true;
return ret;
}
[snip]
@@ -1305,5 +1368,8 @@ virCommandFree(virCommandPtr cmd)
VIR_FREE(cmd->pidfile);
+ if (cmd->reap)
+ virCommandAbort(cmd);
+
VIR_FREE(cmd);
}
We allow virCommandRunAsync to be used for daemonized
commands, so I don't think it is safe to unconditionally
kill off the PID when free'ing the virCommandPtr instance.
Regards,
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|