[PATCH v2 1/2] libvirtd: fix crash on termination

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The problem is incorrect order of qemu driver shutdown and shutdown
of netserver threads that serve client requests (thru qemu driver
particularly).

Net server threads are shutdowned upon dispose which is triggered
by last daemon object unref at the end of main function. At the same
time qemu driver is shutdowned earlier in virStateCleanup. As a result
netserver threads see invalid driver object in the middle of request
processing.

Let's move shutting down netserver threads earlier to virNetDaemonClose.

Note: order of last daemon unref and virStateCleanup
is introduced in 85c3a182 for a valid reason.
---

One can use next patch to trigger crash on termination. Call domstats function 
and then send TERM to libvirtd.

[2] patch to trigger crash
#   diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
#   index cf5e4ad..39a57aa 100644
#   --- a/src/qemu/qemu_driver.c
#   +++ b/src/qemu/qemu_driver.c
#   @@ -20144,6 +20144,8 @@ qemuConnectGetAllDomainStats(virConnectPtr conn,
#        domflags = 0;
#        vm = vms[i];
#
#   +    sleep(5);
#   +
#        virObjectLock(vm);
#
#        if (HAVE_JOB(privflags) &&

 src/rpc/virnetdaemon.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/rpc/virnetdaemon.c b/src/rpc/virnetdaemon.c
index e3b9390..c05df68 100644
--- a/src/rpc/virnetdaemon.c
+++ b/src/rpc/virnetdaemon.c
@@ -102,7 +102,8 @@ virNetDaemonDispose(void *obj)
     if (dmn->sigwatch > 0)
         virEventRemoveHandle(dmn->sigwatch);
 
-    virHashFree(dmn->servers);
+    if (dmn->servers)
+        virHashFree(dmn->servers);
 
     virJSONValueFree(dmn->srvObject);
 }
@@ -880,6 +881,8 @@ virNetDaemonClose(virNetDaemonPtr dmn)
     virObjectLock(dmn);
 
     virHashForEach(dmn->servers, daemonServerClose, NULL);
+    virHashFree(dmn->servers);
+    dmn->servers = NULL;
 
     virObjectUnlock(dmn);
 }
-- 
1.8.3.1

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]
  Powered by Linux