[libvirt] [PATCH] virQEMUCapsInitQMP: Don't dispose locked @vm

Martin Kletzander mkletzan at redhat.com
Tue Mar 10 13:59:02 UTC 2015


On Tue, Mar 10, 2015 at 02:30:16PM +0100, Michal Privoznik wrote:
>When creating qemu capabilities, a dummy virDomainObj is created just
>because our monitor code expects that. However, the object is created
>locked already. Then, under cleanup label, we simply unref the object
>which results in whole domain object to be disposed. The object lock
>is destroyed subsequently, but hey - it's still locked:
>
>==24845== Thread #14's call to pthread_mutex_destroy failed
>==24845==    with error code 16 (EBUSY: Device or resource busy)
>==24845==    at 0x4C3024E: pthread_mutex_destroy (in /usr/lib64/valgrind/vgpreload_helgrind-amd64-linux.so)
>==24845==    by 0x531F72E: virMutexDestroy (virthread.c:83)
>==24845==    by 0x5302977: virObjectLockableDispose (virobject.c:237)
>==24845==    by 0x5302A89: virObjectUnref (virobject.c:265)
>==24845==    by 0x1DD37866: virQEMUCapsInitQMP (qemu_capabilities.c:3397)
>==24845==    by 0x1DD37CC6: virQEMUCapsNewForBinary (qemu_capabilities.c:3481)
>==24845==    by 0x1DD381E2: virQEMUCapsCacheLookup (qemu_capabilities.c:3609)
>==24845==    by 0x1DD30F8A: virQEMUCapsInitGuest (qemu_capabilities.c:744)
>==24845==    by 0x1DD31889: virQEMUCapsInit (qemu_capabilities.c:1020)
>==24845==    by 0x1DD7DD36: virQEMUDriverCreateCapabilities (qemu_conf.c:888)
>==24845==    by 0x1DDC57C0: qemuStateInitialize (qemu_driver.c:803)
>==24845==    by 0x53DC743: virStateInitialize (libvirt.c:777)
>==24845==
>
>Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
>---
> src/qemu/qemu_capabilities.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
>diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
>index 8193805..dce40e0 100644
>--- a/src/qemu/qemu_capabilities.c
>+++ b/src/qemu/qemu_capabilities.c
>@@ -3394,7 +3394,10 @@ virQEMUCapsInitQMP(virQEMUCapsPtr qemuCaps,
>     if (monpath)
>         ignore_value(unlink(monpath));
>     VIR_FREE(monpath);
>-    virObjectUnref(vm);
>+    if (vm) {
>+        virObjectUnlock(vm);
>+        virObjectUnref(vm);
>+    }

Looks like a job for EndAPI ;)

ACK

>     virObjectUnref(xmlopt);
>
>     if (pid != 0) {
>--
>2.0.5
>
>--
>libvir-list mailing list
>libvir-list at redhat.com
>https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150310/1f88e276/attachment-0001.sig>


More information about the libvir-list mailing list