[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