[libvirt] heisenbug in command.c

Eric Blake eblake at redhat.com
Fri Mar 16 16:50:28 UTC 2012


On 03/16/2012 10:36 AM, Serge Hallyn wrote:
> Hi,
> 
> It seems I've run into quite the heisenbug, reported at
> https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/922628
> 
> It manifests itself as virPidWait returning status=4 for iptables (which
> should never exit with status=4).

Maybe iptables isn't documented as exiting with $? of 4, but that's what
is happening.  The libvirt code in question is quite clear that it
grabbed an accurate exit status from the child process.

    ret = virPidWait(cmd->pid, exitstatus ? exitstatus : &status);
    if (ret == 0) {
        cmd->pid = -1;
        cmd->reap = false;
        if (status) {
            char *str = virCommandToString(cmd);
            char *st = virCommandTranslateStatus(status);
            virCommandError(VIR_ERR_INTERNAL_ERROR,
                            _("Child process (%s) status unexpected: %s"),
                            str ? str : cmd->args[0], NULLSTR(st));

>  But it's only been seen on two (very
> different) machines, and the slightest shifting of the winds makes it go
> away.  Given how sneaky this bug appears to be, there's a slight
> temptation to have iptablesAddRemoveRule pass in a int* for status and
> better deal with the -EINTR.  But I fear that might be papering over a
> worse race.

I don't follow how you think there is a -EINTR being encountered in
libvirt.  I think you'd be better off investigating why iptables really
is exiting with status 4.

-- 
Eric Blake   eblake at redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120316/d0b9eb91/attachment-0001.sig>


More information about the libvir-list mailing list