提交 eed4cb36 编写于 作者: D Daniel P. Berrange 提交者: Cole Robinson

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: NDaniel P. Berrange <berrange@redhat.com>
(cherry picked from commit 362d0477)
上级 b635baf6
......@@ -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);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册