[libvirt] [PATCH 2/2] DO NOT APPLY UPSTREAM: Reproducer of domain free crash

Peter Krempa pkrempa at redhat.com
Tue Apr 9 13:02:12 UTC 2013


The issue is triggered using the following shell oneliner with this patch
applied:

virsh undefine domain & sleep .1; virsh dominfo domain
---
 src/conf/domain_conf.c | 4 ++++
 src/qemu/qemu_driver.c | 6 ++++++
 2 files changed, 10 insertions(+)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index cafef0c..8e1ccda 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -2241,8 +2241,12 @@ void virDomainObjListRemove(virDomainObjListPtr doms,
     virObjectRef(dom);
     virObjectUnlock(dom);

+    printf(" DEBUG: about to remove dom %s from list\n", uuidstr);
+    sleep(2);
+
     virObjectLock(doms);
     virObjectLock(dom);
+    printf(" DEBUG: locked, removing dom %s from list\n", uuidstr);
     virHashRemoveEntry(doms->objs, uuidstr);
     virObjectUnlock(dom);
     virObjectUnref(dom);
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 2c0d7d1..76daa01 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -2296,10 +2296,16 @@ static int qemuDomainGetInfo(virDomainPtr dom,
     int ret = -1;
     int err;
     unsigned long long balloon;
+    char uuidstr[VIR_UUID_STRING_BUFLEN];

     if (!(vm = qemuDomObjFromDomain(dom)))
         goto cleanup;

+    virUUIDFormat(dom->uuid, uuidstr);
+    printf(" DEBUG: about to look up info on %s\n", uuidstr);
+    sleep(5);
+    printf(" DEBUG: looking up info on %s\n", uuidstr);
+
     info->state = virDomainObjGetState(vm, NULL);

     if (!virDomainObjIsActive(vm)) {
-- 
1.8.1.5




More information about the libvir-list mailing list