[libvirt] [PATCH 3/7] Add helper function virExecDaemonize
Cole Robinson
crobinso at redhat.com
Mon May 4 19:54:15 UTC 2009
Daniel P. Berrange wrote:
> On Tue, Apr 28, 2009 at 11:31:53AM -0400, Cole Robinson wrote:
>> Wraps __virExec with the VIR_EXEC_DAEMON flag. Waits on the intermediate
>> process to ensure we don't end up with any zombies, and differentiates between
>> original process errors and intermediate process errors.
>> +int virExecDaemonize(virConnectPtr conn,
>> + const char *const*argv,
>> + const char *const*envp,
>> + const fd_set *keepfd,
>> + pid_t *retpid,
>> + int infd, int *outfd, int *errfd,
>> + int flags,
>> + virExecHook hook,
>> + void *data) {
>> + int ret;
>> + int childstat = 0;
>> +
>> + ret = virExecWithHook(conn, argv, envp, keepfd, retpid,
>> + infd, outfd, errfd,
>> + flags |= VIR_EXEC_DAEMON,
>> + hook, data);
>> +
>> + /* Wait for intermediate process to exit */
>> + while (waitpid(*retpid, &childstat, 0) == -1 &&
>> + errno == EINTR);
>
> I think we should only call waitpid() if 'ret == 0', because if ret is
> not 0, *retpid won't have been set and will thus contain random garbage.
>
Good catch. I've resent the series with this and your others comments
addressed.
Thanks,
Cole
More information about the libvir-list
mailing list