From 817206cdc85442a090d01f2d3011847ee02d8565 Mon Sep 17 00:00:00 2001 From: Jim Fehlig Date: Wed, 3 Sep 2014 14:14:50 -0600 Subject: [PATCH] libxl: fix mapping of libvirt and libxl lifecycle actions The libxl driver was blindly assigning libvirt's virDomainLifecycleAction to libxl's libxl_action_on_shutdown, when in fact the various actions take on different values in these enums. Introduce helpers to properly map the enum values. Signed-off-by: Jim Fehlig --- src/libxl/libxl_conf.c | 62 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index ea8b5c7e3b..acba69c52f 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -102,6 +102,62 @@ libxlDriverConfigDispose(void *obj) VIR_FREE(cfg->autoDumpDir); } + +static libxl_action_on_shutdown +libxlActionFromVirLifecycle(virDomainLifecycleAction action) +{ + switch (action) { + case VIR_DOMAIN_LIFECYCLE_DESTROY: + return LIBXL_ACTION_ON_SHUTDOWN_DESTROY; + + case VIR_DOMAIN_LIFECYCLE_RESTART: + return LIBXL_ACTION_ON_SHUTDOWN_RESTART; + + case VIR_DOMAIN_LIFECYCLE_RESTART_RENAME: + return LIBXL_ACTION_ON_SHUTDOWN_RESTART_RENAME; + + case VIR_DOMAIN_LIFECYCLE_PRESERVE: + return LIBXL_ACTION_ON_SHUTDOWN_PRESERVE; + + case VIR_DOMAIN_LIFECYCLE_LAST: + break; + } + + return 0; +} + + +static libxl_action_on_shutdown +libxlActionFromVirLifecycleCrash(virDomainLifecycleCrashAction action) +{ + + switch (action) { + case VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY: + return LIBXL_ACTION_ON_SHUTDOWN_DESTROY; + + case VIR_DOMAIN_LIFECYCLE_CRASH_RESTART: + return LIBXL_ACTION_ON_SHUTDOWN_RESTART; + + case VIR_DOMAIN_LIFECYCLE_CRASH_RESTART_RENAME: + return LIBXL_ACTION_ON_SHUTDOWN_RESTART_RENAME; + + case VIR_DOMAIN_LIFECYCLE_CRASH_PRESERVE: + return LIBXL_ACTION_ON_SHUTDOWN_PRESERVE; + + case VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_DESTROY: + return LIBXL_ACTION_ON_SHUTDOWN_COREDUMP_DESTROY; + + case VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_RESTART: + return LIBXL_ACTION_ON_SHUTDOWN_COREDUMP_RESTART; + + case VIR_DOMAIN_LIFECYCLE_CRASH_LAST: + break; + } + + return 0; +} + + static int libxlCapsInitHost(libxl_ctx *ctx, virCapsPtr caps) { @@ -1432,9 +1488,9 @@ libxlBuildDomainConfig(virPortAllocatorPtr graphicsports, if (libxlMakePCIList(def, d_config) < 0) return -1; - d_config->on_reboot = def->onReboot; - d_config->on_poweroff = def->onPoweroff; - d_config->on_crash = def->onCrash; + d_config->on_reboot = libxlActionFromVirLifecycle(def->onReboot); + d_config->on_poweroff = libxlActionFromVirLifecycle(def->onPoweroff); + d_config->on_crash = libxlActionFromVirLifecycleCrash(def->onCrash); return 0; } -- GitLab