[libvirt] [PATCH 3/7] Add helper function virExecDaemonize

Daniel P. Berrange berrange at redhat.com
Wed Apr 29 12:18:53 UTC 2009


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.

> +
> +    /* __virExec should have set an error */
> +    if (ret != 0)
> +        return -1;
> +
> +    if (childstat != 0) {
> +        ReportError(conn, VIR_ERR_INTERNAL_ERROR,
> +                    _("Intermediate daemon process exited with status %d."),
> +                    WEXITSTATUS(childstat));
> +        ret = -2;
> +    }
> +
> +    return ret;
> +}
> +



Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list