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. -- Eric Blake eblake@xxxxxxxxxx +1-801-349-2682 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list