提交 7a18fbee 编写于 作者: M Matthias Bolte

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
上级 816d7914
...@@ -5317,7 +5317,6 @@ virDomainObjIsDuplicate(virDomainObjListPtr doms, ...@@ -5317,7 +5317,6 @@ virDomainObjIsDuplicate(virDomainObjListPtr doms,
} }
dupVM = 1; dupVM = 1;
virDomainObjUnlock(vm);
} else { } else {
/* UUID does not match, but if a name matches, refuse it */ /* UUID does not match, but if a name matches, refuse it */
vm = virDomainFindByName(doms, def->name); vm = virDomainFindByName(doms, def->name);
......
...@@ -229,6 +229,7 @@ static int qemuDomainObjBeginJobWithDriver(struct qemud_driver *driver, ...@@ -229,6 +229,7 @@ static int qemuDomainObjBeginJobWithDriver(struct qemud_driver *driver,
else else
virReportSystemError(NULL, errno, virReportSystemError(NULL, errno,
"%s", _("cannot acquire job mutex")); "%s", _("cannot acquire job mutex"));
qemuDriverLock(driver);
return -1; return -1;
} }
} }
...@@ -3471,9 +3472,9 @@ static int qemudDomainSave(virDomainPtr dom, ...@@ -3471,9 +3472,9 @@ static int qemudDomainSave(virDomainPtr dom,
if (header.compressed == QEMUD_SAVE_FORMAT_RAW) { if (header.compressed == QEMUD_SAVE_FORMAT_RAW) {
const char *args[] = { "cat", NULL }; const char *args[] = { "cat", NULL };
qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjPrivatePtr priv = vm->privateData;
qemuDomainObjEnterMonitor(vm); qemuDomainObjEnterMonitorWithDriver(driver, vm);
rc = qemuMonitorMigrateToCommand(priv->mon, 0, args, path); rc = qemuMonitorMigrateToCommand(priv->mon, 0, args, path);
qemuDomainObjExitMonitor(vm); qemuDomainObjExitMonitorWithDriver(driver, vm);
} else { } else {
const char *prog = qemudSaveCompressionTypeToString(header.compressed); const char *prog = qemudSaveCompressionTypeToString(header.compressed);
qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjPrivatePtr priv = vm->privateData;
...@@ -3482,9 +3483,9 @@ static int qemudDomainSave(virDomainPtr dom, ...@@ -3482,9 +3483,9 @@ static int qemudDomainSave(virDomainPtr dom,
"-c", "-c",
NULL NULL
}; };
qemuDomainObjEnterMonitor(vm); qemuDomainObjEnterMonitorWithDriver(driver, vm);
rc = qemuMonitorMigrateToCommand(priv->mon, 0, args, path); rc = qemuMonitorMigrateToCommand(priv->mon, 0, args, path);
qemuDomainObjExitMonitor(vm); qemuDomainObjExitMonitorWithDriver(driver, vm);
} }
if (rc < 0) if (rc < 0)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册