[libvirt] [PATCH RFC 06/22] qemu_capabilities: Stop QEMU process before freeing

Jiri Denemark jdenemar at redhat.com
Tue Nov 27 15:30:13 UTC 2018


On Sun, Nov 11, 2018 at 13:59:14 -0600, Chris Venteicher wrote:
> Follow the convention established in qemu_process of
> 1) alloc process structure
> 2) start process
> 3) use process
> 4) stop process
> 5) free process data structure
> 
> The process data structure persists after the process activation fails
> or the process dies or is killed so stderr strings can be retrieved
> until the process data structure is freed.
> 
> Signed-off-by: Chris Venteicher <cventeic at redhat.com>
> ---
>  src/qemu/qemu_capabilities.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index 73ec8e5c6e..082874082b 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -4251,6 +4251,7 @@ virQEMUCapsInitQMP(virQEMUCapsPtr qemuCaps,
>      ret = 0;
>  
>   cleanup:
> +    qemuProcessStopQmp(proc);

Doing this here would just crash the daemon if proc == NULL. Also
qemuProcessFree will call the same function again, which will cause a
lot of issues. For example, proc->vm will be unlocked and unreferenced
twice.

That said, you need to squash some code from the following patches to
this one to make sure it doesn't cause any functional change.

>      qemuProcessFree(proc);
>      return ret;

Jirka




More information about the libvir-list mailing list