]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Avoid deadlock on HandleAgentEOF
authorMichal Privoznik <mprivozn@redhat.com>
Fri, 14 Sep 2012 08:53:00 +0000 (10:53 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 18 Sep 2012 07:24:06 +0000 (09:24 +0200)
On agent EOF the qemuProcessHandleAgentEOF() callback is called
which locks virDomainObjPtr. Then qemuAgentClose() is called
(with domain object locked) which eventually calls qemuAgentDispose()
and qemuProcessHandleAgentDestroy(). This tries to lock the
domain object again. Hence the deadlock.

src/qemu/qemu_process.c

index abbe1f9ce402c60000243eb627c395f89f50bc1d..5095381b7d923b02bff4311df06e2025c9435883 100644 (file)
@@ -116,7 +116,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;
@@ -128,12 +128,12 @@ qemuProcessHandleAgentEOF(qemuAgentPtr agent ATTRIBUTE_UNUSED,
     virDomainObjLock(vm);
 
     priv = vm->privateData;
-
-    qemuAgentClose(agent);
     priv->agent = NULL;
 
     virDomainObjUnlock(vm);
     qemuDriverUnlock(driver);
+
+    qemuAgentClose(agent);
 }