[libvirt] [PATCH] qemu: Kill processes used for QMP caps probing
Peter Krempa
pkrempa at redhat.com
Tue Oct 2 11:08:13 UTC 2012
On 10/02/12 11:07, Jiri Denemark wrote:
> Since libvirt switched to QMP capabilities probing recently, it starts
> QEMU process used for this probing with -daemonize, which means
> virCommandAbort can no longer reach these processes. As a result of
> that, restarting libvirtd will leave several new QEMU processes behind.
> Let's use QEMU's -pidfile and use it to kill the process when QMP caps
> probing is done.
> ---
> src/qemu/qemu_capabilities.c | 51 ++++++++++++++++++++++++++++++++++++++------
> src/qemu/qemu_capabilities.h | 5 +++--
> src/qemu/qemu_driver.c | 4 +++-
> 3 files changed, 51 insertions(+), 9 deletions(-)
>
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index 20b350a..bfefa92 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -2300,12 +2317,32 @@ cleanup:
> virCommandFree(cmd);
> VIR_FREE(monarg);
> VIR_FREE(monpath);
> +
> + if (pidfile) {
> + char ebuf[1024];
> + pid_t pid;
> + int rc;
> +
> + if ((rc = virPidFileReadPath(pidfile, &pid)) < 0) {
> + VIR_DEBUG("Failed to read pidfile %s: %d",
> + pidfile, virStrerror(-rc, ebuf, sizeof(ebuf)));
I'd use VIR_WARN here
> + } else {
> + VIR_DEBUG("Killing QMP caps process %lld", (long long) pid);
> + if (virProcessKill(pid, SIGKILL) < 0)
> + VIR_DEBUG("Failed to kill process %lld: %s",
and here. I think that if we possibly leave a running process behind, we
should be a little louder about that.
> + (long long) pid,
> + virStrerror(errno, ebuf, sizeof(ebuf)));
> + }
> + unlink(pidfile);
> + VIR_FREE(pidfile);
> + }
> return ret;
> }
>
ACK.
Peter
More information about the libvir-list
mailing list