mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +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>
This commit is contained in:
parent
5cbb0d37d4
commit
362d04779c
@ -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