From d376b7d63ec1ef24ba4c812d58b9a414ddb561f8 Mon Sep 17 00:00:00 2001 From: Chris Lalancette Date: Wed, 10 Mar 2010 16:50:13 -0500 Subject: [PATCH] Fix hang in qemudDomainCoreDump. Currently if you dump the core of a qemu guest with qemudDomainCoreDump, subsequent commands will hang up libvirtd. This is because qemudDomainCoreDump uses qemuDomainWaitForMigrationComplete, which expects the qemuDriverLock to be held when it's called. This patch does the simple thing and moves the qemuDriveUnlock to the end of the qemudDomainCoreDump so that the driver lock is held for the entirety of the call (as it is done in qemudDomainSave). We will probably want to make the lock more fine-grained than that in the future, but we can fix both qemudDomainCoreDump and qemudDomainSave at the same time. Signed-off-by: Chris Lalancette --- src/qemu/qemu_driver.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index be1490e446..f8ab545c1f 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -4389,7 +4389,6 @@ static int qemudDomainCoreDump(virDomainPtr dom, qemuDriverLock(driver); vm = virDomainFindByUUID(&driver->domains, dom->uuid); - qemuDriverUnlock(driver); if (!vm) { char uuidstr[VIR_UUID_STRING_BUFLEN]; @@ -4400,7 +4399,7 @@ static int qemudDomainCoreDump(virDomainPtr dom, } priv = vm->privateData; - if (qemuDomainObjBeginJob(vm) < 0) + if (qemuDomainObjBeginJobWithDriver(driver, vm) < 0) goto cleanup; if (!virDomainObjIsActive(vm)) { @@ -4498,6 +4497,7 @@ cleanup: virDomainObjUnlock(vm); if (event) qemuDomainEventQueue(driver, event); + qemuDriverUnlock(driver); return ret; }