From 7a18fbeeb8824a6f270ef83b1c490269968ef1b3 Mon Sep 17 00:00:00 2001 From: Matthias Bolte Date: Thu, 3 Dec 2009 00:03:06 +0100 Subject: [PATCH] Fix some locking issues * src/conf/domain_conf.c: don't call virDomainObjUnlock twice * src/qemu/qemu_driver.c: relock driver lock if an error occurs in qemuDomainObjBeginJobWithDriver, enter/exit monitor with driver in qemudDomainSave --- src/conf/domain_conf.c | 1 - src/qemu/qemu_driver.c | 9 +++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 42820a7f96..6a8fd5d127 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -5317,7 +5317,6 @@ virDomainObjIsDuplicate(virDomainObjListPtr doms, } dupVM = 1; - virDomainObjUnlock(vm); } else { /* UUID does not match, but if a name matches, refuse it */ vm = virDomainFindByName(doms, def->name); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index c9b5ac268d..43d20ea2a8 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -229,6 +229,7 @@ static int qemuDomainObjBeginJobWithDriver(struct qemud_driver *driver, else virReportSystemError(NULL, errno, "%s", _("cannot acquire job mutex")); + qemuDriverLock(driver); return -1; } } @@ -3471,9 +3472,9 @@ static int qemudDomainSave(virDomainPtr dom, if (header.compressed == QEMUD_SAVE_FORMAT_RAW) { const char *args[] = { "cat", NULL }; qemuDomainObjPrivatePtr priv = vm->privateData; - qemuDomainObjEnterMonitor(vm); + qemuDomainObjEnterMonitorWithDriver(driver, vm); rc = qemuMonitorMigrateToCommand(priv->mon, 0, args, path); - qemuDomainObjExitMonitor(vm); + qemuDomainObjExitMonitorWithDriver(driver, vm); } else { const char *prog = qemudSaveCompressionTypeToString(header.compressed); qemuDomainObjPrivatePtr priv = vm->privateData; @@ -3482,9 +3483,9 @@ static int qemudDomainSave(virDomainPtr dom, "-c", NULL }; - qemuDomainObjEnterMonitor(vm); + qemuDomainObjEnterMonitorWithDriver(driver, vm); rc = qemuMonitorMigrateToCommand(priv->mon, 0, args, path); - qemuDomainObjExitMonitor(vm); + qemuDomainObjExitMonitorWithDriver(driver, vm); } if (rc < 0)