From: Cole Robinson Date: Thu, 2 Jun 2011 15:01:36 +0000 (-0400) Subject: lxc: Drop container stdio as late as possible X-Git-Tag: v0.9.3-rc1~225 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=eee1763c8c591ad133d92c94ca7e96fefc277b36;p=thirdparty%2Flibvirt.git lxc: Drop container stdio as late as possible Makes it more likely we get useful error output in the logs --- diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c index 9ae93b5a82..173af07696 100644 --- a/src/lxc/lxc_container.c +++ b/src/lxc/lxc_container.c @@ -751,9 +751,9 @@ static int lxcContainerChild( void *data ) { lxc_child_argv_t *argv = data; virDomainDefPtr vmDef = argv->config; - int ttyfd; + int ttyfd = -1; int ret = -1; - char *ttyPath; + char *ttyPath = NULL; virDomainFSDefPtr root; virCommandPtr cmd = NULL; @@ -786,16 +786,8 @@ static int lxcContainerChild( void *data ) virReportSystemError(errno, _("Failed to open tty %s"), ttyPath); - VIR_FREE(ttyPath); goto cleanup; } - VIR_FREE(ttyPath); - - if (lxcContainerSetStdio(argv->monitor, ttyfd) < 0) { - VIR_FORCE_CLOSE(ttyfd); - goto cleanup; - } - VIR_FORCE_CLOSE(ttyfd); if (lxcContainerSetupMounts(vmDef, root) < 0) goto cleanup; @@ -806,17 +798,28 @@ static int lxcContainerChild( void *data ) /* rename and enable interfaces */ if (lxcContainerRenameAndEnableInterfaces(argv->nveths, - argv->veths) < 0) + argv->veths) < 0) { goto cleanup; + } /* drop a set of root capabilities */ if (lxcContainerDropCapabilities() < 0) goto cleanup; - /* this function will only return if an error occured */ - ret = virCommandExec(cmd); + if (lxcContainerSetStdio(argv->monitor, ttyfd) < 0) { + goto cleanup; + } + ret = 0; cleanup: + VIR_FREE(ttyPath); + VIR_FORCE_CLOSE(ttyfd); + + if (ret == 0) { + /* this function will only return if an error occured */ + ret = virCommandExec(cmd); + } + virCommandFree(cmd); return ret; }