SHA256
1
0
forked from pool/libvirt
libvirt/82452a5d-libxl-rm-goto-libxlDomainShutdownThread.patch
James Fehlig 0a997d39fb Accepting request 647056 from home:jfehlig:branches:Virtualization
- libxl: add support for soft reset
  14d03b27-libxl-rm-redundant-virObjectEventStateQueue.patch,
  82452a5d-libxl-rm-goto-libxlDomainShutdownThread.patch,
  da4b0fd9-libxl-support-soft-reset.patch
  bsc#1081516

OBS-URL: https://build.opensuse.org/request/show/647056
OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=716
2018-11-07 17:17:07 +00:00

134 lines
5.1 KiB
Diff

commit 82452a5d7f55c7698459728a3ee071402f43bb4d
Author: Jim Fehlig <jfehlig@suse.com>
Date: Wed Oct 31 10:54:14 2018 -0600
libxl: Remove some goto labels in libxlDomainShutdownThread
There are too many goto labels in libxlDomainShutdownThread. Convert the
'destroy' and 'restart' labels to helper functions, leaving only the
commonly used pattern of 'endjob' and 'cleanup' labels.
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index 9ed6ee8fb3..4cdaee0e51 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -430,6 +430,30 @@ virDomainDefParserConfig libxlDomainDefParserConfig = {
};
+static void
+libxlDomainShutdownHandleDestroy(libxlDriverPrivatePtr driver,
+ virDomainObjPtr vm)
+{
+ libxlDomainDestroyInternal(driver, vm);
+ libxlDomainCleanup(driver, vm);
+ if (!vm->persistent)
+ virDomainObjListRemove(driver->domains, vm);
+}
+
+
+static void
+libxlDomainShutdownHandleRestart(libxlDriverPrivatePtr driver,
+ virDomainObjPtr vm)
+{
+ libxlDomainDestroyInternal(driver, vm);
+ libxlDomainCleanup(driver, vm);
+ if (libxlDomainStartNew(driver, vm, false) < 0) {
+ VIR_ERROR(_("Failed to restart VM '%s': %s"),
+ vm->def->name, virGetLastErrorMessage());
+ }
+}
+
+
struct libxlShutdownThreadInfo
{
libxlDriverPrivatePtr driver;
@@ -468,10 +492,12 @@ libxlDomainShutdownThread(void *opaque)
VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN);
switch ((virDomainLifecycleAction) vm->def->onPoweroff) {
case VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY:
- goto destroy;
+ libxlDomainShutdownHandleDestroy(driver, vm);
+ goto endjob;
case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART:
case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME:
- goto restart;
+ libxlDomainShutdownHandleRestart(driver, vm);
+ goto endjob;
case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE:
case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY:
case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART:
@@ -487,19 +513,23 @@ libxlDomainShutdownThread(void *opaque)
VIR_DOMAIN_EVENT_STOPPED_CRASHED);
switch ((virDomainLifecycleAction) vm->def->onCrash) {
case VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY:
- goto destroy;
+ libxlDomainShutdownHandleDestroy(driver, vm);
+ goto endjob;
case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART:
case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME:
- goto restart;
+ libxlDomainShutdownHandleRestart(driver, vm);
+ goto endjob;
case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE:
case VIR_DOMAIN_LIFECYCLE_ACTION_LAST:
goto endjob;
case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY:
libxlDomainAutoCoreDump(driver, vm);
- goto destroy;
+ libxlDomainShutdownHandleDestroy(driver, vm);
+ goto endjob;
case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART:
libxlDomainAutoCoreDump(driver, vm);
- goto restart;
+ libxlDomainShutdownHandleRestart(driver, vm);
+ goto endjob;
}
} else if (xl_reason == LIBXL_SHUTDOWN_REASON_REBOOT) {
virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF,
@@ -510,10 +540,12 @@ libxlDomainShutdownThread(void *opaque)
VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN);
switch ((virDomainLifecycleAction) vm->def->onReboot) {
case VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY:
- goto destroy;
+ libxlDomainShutdownHandleDestroy(driver, vm);
+ goto endjob;
case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART:
case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME:
- goto restart;
+ libxlDomainShutdownHandleRestart(driver, vm);
+ goto endjob;
case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE:
case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY:
case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART:
@@ -531,26 +563,8 @@ libxlDomainShutdownThread(void *opaque)
* Similar to the xl implementation, ignore SUSPEND. Any actions needed
* after calling libxl_domain_suspend() are handled by it's callers.
*/
- goto endjob;
} else {
VIR_INFO("Unhandled shutdown_reason %d", xl_reason);
- goto endjob;
- }
-
- destroy:
- libxlDomainDestroyInternal(driver, vm);
- libxlDomainCleanup(driver, vm);
- if (!vm->persistent)
- virDomainObjListRemove(driver->domains, vm);
-
- goto endjob;
-
- restart:
- libxlDomainDestroyInternal(driver, vm);
- libxlDomainCleanup(driver, vm);
- if (libxlDomainStartNew(driver, vm, false) < 0) {
- VIR_ERROR(_("Failed to restart VM '%s': %s"),
- vm->def->name, virGetLastErrorMessage());
}
endjob: