
On Wed, Dec 03, 2014 at 06:49:04AM +0100, Martin Kletzander wrote:
@@ -109,7 +117,6 @@ To lock the virDomainObjPtr To acquire the normal job condition
qemuDomainObjBeginJob() - - Increments ref count on virDomainObjPtr - Waits until the job is compatible with current async job or no async job is running - Waits for job.cond condition 'job.active != 0' using virDomainObjPtr @@ -122,14 +129,12 @@ To acquire the normal job condition qemuDomainObjEndJob() - Sets job.active to 0 - Signals on job.cond condition - - Decrements ref count on virDomainObjPtr
I think this is really the key improvement here. Currently we have this error prone code where we have to check for NULLs after leaving the job if (qemuDomainObjEndJob() < 0) vm = NULL; if (vm) virObjectUnlock(vm) With the methods now fully owning a reference, the 'vm' object can never be disposed off by another thread. So it will let us make the code simpler and less error prone.
+void +qemuDomObjEndAPI(virDomainObjPtr vm) +{ + if (virObjectUnref(vm)) + virObjectUnlock(vm); +}
I've not thought about it too deeply, so could be missing something, but I wonder if it is not sufficient todo virObjectUnlock(vm); virObjectUnref(vm); As there is no requirement for the object to be locked now we're using atomic ints for reference counting. This would avoid the need go hide the unlock/unref behind this qemuDomObjEndAPI method. Just have this inline so it is obvious to the casual reader that we're unrefing + unlocking the object Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|