]> xenbits.xensource.com Git - libvirt.git/commitdiff
Fix some locking issues
authorMatthias Bolte <matthias.bolte@googlemail.com>
Wed, 2 Dec 2009 23:03:06 +0000 (00:03 +0100)
committerMatthias Bolte <matthias.bolte@googlemail.com>
Thu, 3 Dec 2009 16:06:38 +0000 (17:06 +0100)
* 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
src/qemu/qemu_driver.c

index 42820a7f962b34abab40e8726cd7ae81f3c1f3f9..6a8fd5d12794bdeb7d27fd98c91aca7887dbb5e2 100644 (file)
@@ -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);
index c9b5ac268d76d247aa6a4254e75752b50b28fdb3..43d20ea2a8669a3b78e9a58d88307bce3a9825fe 100644 (file)
@@ -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)