55 lines
1.8 KiB
Diff
55 lines
1.8 KiB
Diff
|
|
From 517d69d6c3935adf59fcf9ed11cb05e1dfa8a6f3 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Michal Privoznik <mprivozn@redhat.com>
|
||
|
|
Date: Tue, 5 May 2020 13:45:44 +0200
|
||
|
|
Subject: [PATCH] qemuDomainCleanupRun: Actually run cleanup callbacks in
|
||
|
|
reverse order
|
||
|
|
MIME-Version: 1.0
|
||
|
|
Content-Type: text/plain; charset=UTF-8
|
||
|
|
Content-Transfer-Encoding: 8bit
|
||
|
|
|
||
|
|
We have a framework to register cleanup callbacks that are run
|
||
|
|
when a domain is shut down. The idea is to run callbacks in
|
||
|
|
reverse order than they were registered. However, looking at the
|
||
|
|
code this is not the case. Fortunately, this framework is used to
|
||
|
|
register a single callback and a single callback only -
|
||
|
|
qemuMigrationDstPrepareCleanup() - therefore there was no problem
|
||
|
|
just yet.
|
||
|
|
|
||
|
|
cherry-pick from commit: 06fc99b6ceb846b07e1cae3d82916ef50ca5f60e
|
||
|
|
|
||
|
|
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
|
||
|
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
||
|
|
Signed-off-by: Jin Yan <jinyan12@huawei.com>
|
||
|
|
---
|
||
|
|
src/qemu/qemu_domain.c | 8 ++------
|
||
|
|
1 file changed, 2 insertions(+), 6 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
||
|
|
index b1a4647..36bef67 100644
|
||
|
|
--- a/src/qemu/qemu_domain.c
|
||
|
|
+++ b/src/qemu/qemu_domain.c
|
||
|
|
@@ -11561,18 +11561,14 @@ qemuDomainCleanupRun(virQEMUDriverPtr driver,
|
||
|
|
virDomainObjPtr vm)
|
||
|
|
{
|
||
|
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||
|
|
- size_t i;
|
||
|
|
|
||
|
|
VIR_DEBUG("driver=%p, vm=%s", driver, vm->def->name);
|
||
|
|
|
||
|
|
/* run cleanup callbacks in reverse order */
|
||
|
|
- for (i = 0; i < priv->ncleanupCallbacks; i++) {
|
||
|
|
- if (priv->cleanupCallbacks[priv->ncleanupCallbacks - (i + 1)])
|
||
|
|
- priv->cleanupCallbacks[i](driver, vm);
|
||
|
|
- }
|
||
|
|
+ while (priv->ncleanupCallbacks)
|
||
|
|
+ priv->cleanupCallbacks[--priv->ncleanupCallbacks](driver, vm);
|
||
|
|
|
||
|
|
VIR_FREE(priv->cleanupCallbacks);
|
||
|
|
- priv->ncleanupCallbacks = 0;
|
||
|
|
priv->ncleanupCallbacks_max = 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
--
|
||
|
|
1.8.3.1
|
||
|
|
|