[Libvir] RFC: PATCH 1/5: cleanup connection ref counting

Richard W.M. Jones rjones at redhat.com
Mon Jan 14 10:35:10 UTC 2008

Daniel P. Berrange wrote:
> The referencing counting code for Connect/Domain/Network
> objects has many repeated codepaths, not all of which are
> correct. eg, the virFreeDomain method forgets to release
> networks when garbage collecting a virConnectPtr, and the
> virFreeNetwork method forgets to release domains.

The reference counting in libvirt is not just ugly when interfacing with 
a language with real GC, but also broken at the moment.

The most serious example are the connect/domain/network handles included 
in a virterror.  These are not reference counted so that the caller 
doesn't have to free the virterror or these handles.  But on the other 
hand it means that the handles have an indeterminate lifetime, so cannot 
be used safely.

> So I've moved the code for garbage collecting a virConnectPtr
> object into a new virUnrefConnect() method which can be called
> from virFreeConnect, virFreeDomain and virFreeNetwork.

This probably has negative implications in the language bindings.  At 
this moment I don't care much because network objects are in practice 
used only very rarely by real code.  This could change when we have 
storage objects which, I guess, will be used frequently like domains.  A 
bit too early in the morning for me to be thinking about GC and its 
interaction with reference counting :-)

The rest of the patch looks good.  We should probably integrate this 
patch in the code right now since (a) it's isolated, (b) it implements 
much-needed cleanups, and (c) it needs serious testing.


Emerging Technologies, Red Hat - http://et.redhat.com/~rjones/
Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod
Street, Windsor, Berkshire, SL4 1TE, United Kingdom.  Registered in
England and Wales under Company Registration No. 03798903
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3237 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20080114/a11ff37a/attachment-0001.bin>

More information about the libvir-list mailing list