From eca81e08be2ca7fa322b91983e4aa65664341c47 Mon Sep 17 00:00:00 2001 From: Jiri Denemark Date: Mon, 3 May 2010 14:04:44 +0200 Subject: [PATCH] lxc: Check domain is active/inactive as required by operation Report VIR_ERR_OPERATION_INVALID when operation which requires running domain is called on inactive domain and vice versa. --- src/lxc/lxc_driver.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 6884fea8cc..fc0df37e79 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -1378,6 +1378,12 @@ static int lxcDomainStart(virDomainPtr dom) goto cleanup; } + if (virDomainObjIsActive(vm)) { + lxcError(VIR_ERR_OPERATION_INVALID, + "%s", _("Domain is already running")); + goto cleanup; + } + ret = lxcVmStart(dom->conn, driver, vm); if (ret == 0) @@ -1483,6 +1489,12 @@ static int lxcDomainShutdown(virDomainPtr dom) goto cleanup; } + if (!virDomainObjIsActive(vm)) { + lxcError(VIR_ERR_OPERATION_INVALID, + "%s", _("Domain is not running")); + goto cleanup; + } + ret = lxcVmTerminate(driver, vm, 0); event = virDomainEventNewFromObj(vm, VIR_DOMAIN_EVENT_STOPPED, @@ -1662,6 +1674,12 @@ static int lxcDomainDestroy(virDomainPtr dom) goto cleanup; } + if (!virDomainObjIsActive(vm)) { + lxcError(VIR_ERR_OPERATION_INVALID, + "%s", _("Domain is not running")); + goto cleanup; + } + ret = lxcVmTerminate(driver, vm, SIGKILL); event = virDomainEventNewFromObj(vm, VIR_DOMAIN_EVENT_STOPPED,