Hi, In lxcVmStart we have to set rc = -1 before jumping to the cleanup code when a local procedure call fails and the rc is overwritten, however, some codes don't observe the rule and so invalid cleanups are likely to happen. A simple solution for the defect is to add rc = -1 before every jumping if needed, however, IMHO, we first should not reuse rc for another purpose rather than the return value of lxcVmStart. Instead the patch introduces yet another variable for storing only the return value of the local procedure calls. By doing so, we don't need to care about resetting rc anymore. Thanks, ozaki-r >From c3eb2cfa1280b220d5b92ad2ad8bbf6cf6ca0a04 Mon Sep 17 00:00:00 2001 From: Ryota Ozaki <ozaki.ryota@xxxxxxxxx> Date: Tue, 13 Oct 2009 00:36:41 +0900 Subject: [PATCH] LXC fix rc handling in lxcVmStart * src/lxc/lxc_driver.c: don't reuse rc for local procedure calls --- src/lxc/lxc_driver.c | 15 ++++++--------- 1 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index ef0d368..0b614e3 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -1117,7 +1117,7 @@ static int lxcVmStart(virConnectPtr conn, lxc_driver_t * driver, virDomainObjPtr vm) { - int rc = -1; + int rc = -1, r; unsigned int i; int parentTty; char *parentTtyPath = NULL; @@ -1126,8 +1126,8 @@ static int lxcVmStart(virConnectPtr conn, unsigned int nveths = 0; char **veths = NULL; - if ((rc = virFileMakePath(driver->logDir)) < 0) { - virReportSystemError(conn, rc, + if ((r = virFileMakePath(driver->logDir)) < 0) { + virReportSystemError(conn, r, _("cannot create log directory '%s'"), driver->logDir); return -1; @@ -1157,10 +1157,8 @@ static int lxcVmStart(virConnectPtr conn, goto cleanup; /* Persist the live configuration now we have veth & tty info */ - if (virDomainSaveConfig(conn, driver->stateDir, vm->def) < 0) { - rc = -1; + if (virDomainSaveConfig(conn, driver->stateDir, vm->def) < 0) goto cleanup; - } if ((logfd = open(logfile, O_WRONLY | O_APPEND | O_CREAT, S_IRUSR|S_IWUSR)) < 0) { @@ -1183,11 +1181,10 @@ static int lxcVmStart(virConnectPtr conn, goto cleanup; /* And get its pid */ - if ((rc = virFileReadPid(driver->stateDir, vm->def->name, &vm->pid)) != 0) { - virReportSystemError(conn, rc, + if ((r = virFileReadPid(driver->stateDir, vm->def->name, &vm->pid)) != 0) { + virReportSystemError(conn, r, _("Failed to read pid file %s/%s.pid"), driver->stateDir, vm->def->name); - rc = -1; goto cleanup; } -- 1.6.2.5
Attachment:
0001-LXC-fix-rc-handling-in-lxcVmStart.patch
Description: Binary data
-- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list