[libvirt] [PATCH] libvirt-tck: Ignore SIGPIPE in 051-daemon-hook.t

Osier Yang jyang at redhat.com
Mon Mar 10 13:25:37 UTC 2014


On 07/03/14 23:46, Mike Latimer wrote:
> On Friday, March 07, 2014 05:16:48 PM Osier Yang wrote:
>>>        $hook->cleanup();
>>> +
>>> +    # Restarting libvirtd broke the tck connection, so ignore sigpipe and
>>> +    # undefine $tck to avoid a return code of 141
>>> +    $SIG{PIPE} = 'IGNORE';
>>> +    undef $tck;
>> We should get the libvirt "connection" closed before restarting
>> libvirtd, in tck, it should be "$tck->cleanup()".
> I should have stated in the original email that "$tck->cleanup()" does not
> help here. With just "$tck->cleanup()" after "$hook->cleanup()", the test
> still exists with a return code of 141. If I add the code to ignore the
> SIGPIPE, the test ends with the following messages:
>
> libvirt error code: 38, message: Cannot write data: Broken pipe
> libvirt error code: 1, message: internal error: client socket is closed
>
> If the test restarts libvirtd (using `service libvirtd restart`), the only way
> I can get it to end with an exit code of 0 is to undefine $tck.
>
>

Hm, $tck->cleanup() doesn't close the connection, it just destroy and
undefine the existing domains, networks, and pools.

<snip>
sub reset {
     my $self = shift;
     my $conn = shift || $self->conn;

     $self->reset_domains($conn);
     $self->reset_networks($conn);
     $self->reset_storage_pools($conn);
}

sub cleanup {
     my $self = shift;

     foreach my $conn (@{$self->{conns}}) {
         $self->reset($conn);
     }

     delete $self->{conns};
}
</snip>

So it looks like we need a new helper to close the connection.

Osier




More information about the libvir-list mailing list