[libvirt] [PATCH] Fix hang in qemudDomainCoreDump.
Daniel Veillard
veillard at redhat.com
Thu Mar 11 16:42:52 UTC 2010
On Thu, Mar 11, 2010 at 10:36:29AM -0500, Chris Lalancette wrote:
> 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 <clalance at redhat.com>
> ---
> src/qemu/qemu_driver.c | 4 ++--
> 1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index ee3dbd3..49983dd 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -4390,7 +4390,6 @@ static int qemudDomainCoreDump(virDomainPtr dom,
>
> qemuDriverLock(driver);
> vm = virDomainFindByUUID(&driver->domains, dom->uuid);
> - qemuDriverUnlock(driver);
>
> if (!vm) {
> char uuidstr[VIR_UUID_STRING_BUFLEN];
> @@ -4401,7 +4400,7 @@ static int qemudDomainCoreDump(virDomainPtr dom,
> }
> priv = vm->privateData;
>
> - if (qemuDomainObjBeginJob(vm) < 0)
> + if (qemuDomainObjBeginJobWithDriver(driver, vm) < 0)
> goto cleanup;
>
> if (!virDomainObjIsActive(vm)) {
> @@ -4499,6 +4498,7 @@ cleanup:
> virDomainObjUnlock(vm);
> if (event)
> qemuDomainEventQueue(driver, event);
> + qemuDriverUnlock(driver);
> return ret;
> }
>
Okay, I don't see why CoreDump would need to use finer-grained locking
thank Save,
ACK,
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list