mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-04-01 20:05:19 +00:00
Fix potential deadlock when agent is closed
If the qemuAgentClose method is called from a place which holds the domain lock, it is theoretically possible to get a deadlock in the agent destroy callback. This has not been observed, but the equivalent code in the QEMU monitor destroy callback has seen a deadlock. Remove the redundant locking while unrefing the object and the bogus assignment Signed-off-by: Daniel P. Berrange <berrange@redhat.com> (cherry picked from commit 362d04779ce925725125a4eaa660c89d7313725f)
This commit is contained in:
parent
b635baf666
commit
eed4cb360b
@ -129,7 +129,8 @@ qemuProcessHandleAgentEOF(qemuAgentPtr agent,
|
||||
virDomainObjLock(vm);
|
||||
|
||||
priv = vm->privateData;
|
||||
priv->agent = NULL;
|
||||
if (priv->agent == agent)
|
||||
priv->agent = NULL;
|
||||
|
||||
virDomainObjUnlock(vm);
|
||||
qemuDriverUnlock(driver);
|
||||
@ -167,16 +168,9 @@ qemuProcessHandleAgentError(qemuAgentPtr agent ATTRIBUTE_UNUSED,
|
||||
static void qemuProcessHandleAgentDestroy(qemuAgentPtr agent,
|
||||
virDomainObjPtr vm)
|
||||
{
|
||||
qemuDomainObjPrivatePtr priv;
|
||||
|
||||
VIR_DEBUG("Received destroy agent=%p vm=%p", agent, vm);
|
||||
|
||||
virDomainObjLock(vm);
|
||||
priv = vm->privateData;
|
||||
if (priv->agent == agent)
|
||||
priv->agent = NULL;
|
||||
if (virObjectUnref(vm))
|
||||
virDomainObjUnlock(vm);
|
||||
virObjectUnref(vm);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user