From 9a152d481b4279a0f0d3b0d09bb40c796b52aabf Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Thu, 30 Jul 2009 14:58:16 +0100 Subject: [PATCH] Fix problem writing QEMU pidfile * src/util.c: Don't drop capabilities until after the PID file has been written. Kill off child if writing the PID file fails * src/qemu_driver.c: Remove bogus trailing '/' in state dir --- src/qemu_driver.c | 2 +- src/util.c | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/qemu_driver.c b/src/qemu_driver.c index 9fb8506da1..26897d3421 100644 --- a/src/qemu_driver.c +++ b/src/qemu_driver.c @@ -468,7 +468,7 @@ qemudStartup(int privileged) { goto out_of_memory; if (virAsprintf(&qemu_driver->stateDir, - "%s/run/libvirt/qemu/", LOCAL_STATE_DIR) == -1) + "%s/run/libvirt/qemu", LOCAL_STATE_DIR) == -1) goto out_of_memory; } else { uid_t uid = geteuid(); diff --git a/src/util.c b/src/util.c index ee64b28f7f..39aae24f79 100644 --- a/src/util.c +++ b/src/util.c @@ -513,12 +513,6 @@ __virExec(virConnectPtr conn, if ((hook)(data) != 0) _exit(1); - /* The hook above may need todo something privileged, so - * we delay clearing capabilities until now */ - if ((flags & VIR_EXEC_CLEAR_CAPS) && - virClearCapabilities() < 0) - _exit(1); - /* Daemonize as late as possible, so the parent process can detect * the above errors with wait* */ if (flags & VIR_EXEC_DAEMON) { @@ -543,6 +537,9 @@ __virExec(virConnectPtr conn, if (pid > 0) { if (pidfile && virFileWritePidPath(pidfile,pid)) { + kill(pid, SIGTERM); + usleep(500*1000); + kill(pid, SIGTERM); virReportSystemError(conn, errno, "%s", _("could not write pidfile")); _exit(1); @@ -551,6 +548,12 @@ __virExec(virConnectPtr conn, } } + /* The steps above may need todo something privileged, so + * we delay clearing capabilities until the last minute */ + if ((flags & VIR_EXEC_CLEAR_CAPS) && + virClearCapabilities() < 0) + _exit(1); + if (envp) execve(argv[0], (char **) argv, (char**)envp); else -- GitLab