79c4324644
Change-Id: I2d302dda68298877c65c99147f5bf22186a59aac
56 lines
1.8 KiB
Diff
56 lines
1.8 KiB
Diff
From 046ca6d0b6c80dc233e530c31156a808ae63893a Mon Sep 17 00:00:00 2001
|
|
From: huangkai <huangkai101@huawei.com>
|
|
Date: Mon, 15 Aug 2022 09:32:36 +0800
|
|
Subject: [PATCH 17/22] qemu: fix one more race on undefining and create
|
|
|
|
[1] closes gap in virDomainObjListRemove so that concurrent thread can
|
|
not step in and obtain the domain while domain is temporary unlocked. But
|
|
there is another gap exist:
|
|
|
|
thread B - executes create API
|
|
thread C - executes undefine API
|
|
|
|
- thread A executes some job on domain
|
|
- threads B and C obtains domain from list and wait for job condition
|
|
- thread A finishes its job and C grabs job condition, removes domain
|
|
from list and finishes
|
|
- thread B grabs job condition and start the domain, unfortunately
|
|
is not in the list already
|
|
|
|
[1] commit c7d1c139ca3402e875002753952e80ce8054374e
|
|
Author: Martin Kletzander <mkletzan@redhat.com>
|
|
Date: Thu Dec 11 11:14:08 2014 +0100
|
|
|
|
qemu: avoid rare race when undefining domain
|
|
|
|
Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@openvz.org>
|
|
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
|
|
---
|
|
src/qemu/qemu_domain.c | 10 ++++++++++
|
|
1 file changed, 10 insertions(+)
|
|
|
|
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
|
index c4c3bb57ac..70835e4efd 100644
|
|
--- a/src/qemu/qemu_domain.c
|
|
+++ b/src/qemu/qemu_domain.c
|
|
@@ -9860,6 +9860,16 @@ qemuDomainObjBeginJobInternal(virQEMUDriverPtr driver,
|
|
if (!nested && !qemuDomainNestedJobAllowed(priv, job))
|
|
goto retry;
|
|
|
|
+ if (obj->removing) {
|
|
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
|
|
+
|
|
+ virUUIDFormat(obj->def->uuid, uuidstr);
|
|
+ virReportError(VIR_ERR_NO_DOMAIN,
|
|
+ _("no domain with matching uuid '%s' (%s)"),
|
|
+ uuidstr, obj->def->name);
|
|
+ goto cleanup;
|
|
+ }
|
|
+
|
|
ignore_value(virTimeMillisNow(&now));
|
|
|
|
if (job) {
|
|
--
|
|
2.33.0
|
|
|