[libvirt] [PATCH] qemu: Avoid deadlock on HandleAgentEOF

Osier Yang jyang at redhat.com
Tue Sep 18 02:03:02 UTC 2012


On 2012年09月17日 20:04, Michal Privoznik wrote:
> On agent EOF the qemuProcessHandleAgentEOF() callback is called
> which locks virDomainObjPtr. Then qemuAgentClose() is called
> (with domain object locked) which eventually calls qemuAgentFree()

Guess you mean qemuAgentDispose here.

> and qemuProcessHandleAgentDestroy(). This tries to lock the
> domain object again. Hence the deadlock.
> ---
>   src/qemu/qemu_process.c |    6 +++---
>   1 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
> index 5ac1d2b..8f42c83 100644
> --- a/src/qemu/qemu_process.c
> +++ b/src/qemu/qemu_process.c
> @@ -115,7 +115,7 @@ extern struct qemud_driver *qemu_driver;
>    * performed
>    */
>   static void
> -qemuProcessHandleAgentEOF(qemuAgentPtr agent ATTRIBUTE_UNUSED,
> +qemuProcessHandleAgentEOF(qemuAgentPtr agent,
>                             virDomainObjPtr vm)
>   {
>       struct qemud_driver *driver = qemu_driver;
> @@ -127,12 +127,12 @@ qemuProcessHandleAgentEOF(qemuAgentPtr agent ATTRIBUTE_UNUSED,
>       virDomainObjLock(vm);
>
>       priv = vm->privateData;
> -
> -    qemuAgentClose(agent);
>       priv->agent = NULL;
>
>       virDomainObjUnlock(vm);
>       qemuDriverUnlock(driver);
> +
> +    qemuAgentClose(agent);
>   }
>
>

ACK with the commit msg fixed.




More information about the libvir-list mailing list