[libvirt] [PATCH] Always close drivers when a virConnectPtr is released

Matthias Bolte matthias.bolte at googlemail.com
Wed Nov 24 22:16:38 UTC 2010


2010/11/24 Eric Blake <eblake at redhat.com>:
> On 11/24/2010 10:30 AM, Matthias Bolte wrote:
>> virConnectClose calls virUnrefConnect which in turn closes
>> all open drivers when the refcount of that connection dropped
>> to zero. This works fine when you free all other objects that
>> hold a ref to the connection before you close it, because in
>> this case virUnrefConnect is the one that removes the last
>> ref to the connection.
>>
>> But it doesn't work when you close the connection first before
>> freeing the other objects. This is because the other virUnref*
>> functions call virReleaseConnect when they detect that the
>> connection's refcount dropped to zero. In this case another
>> virUnref* function (different from virUnrefConnect) removes the
>> last ref to the connection. This results in not closing the
>> open drivers and leaking things that should have been cleaned
>> up in the driver close functions.
>>
>> To fix this move the driver close calls to virReleaseConnect.
>> ---
>>  src/datatypes.c |   47 +++++++++++++++++++++++------------------------
>>  1 files changed, 23 insertions(+), 24 deletions(-)
>
> ACK - virUnrefConnect still cleans up, by virtue of calling
> virReleaseConnect, but now anything else that also releases the
> connection also gets to clean up.
>

Thanks, pushed.

Matthias




More information about the libvir-list mailing list