[...] >> >> Still adding the "virHashRemoveAll(dmn->servers);" into >> virNetDaemonClose doesn't help the situation as I can still either crash >> randomly or hang, so I'm less convinced this would really fix anything. >> It does change the "nature" of the hung thread stack trace though, as >> the second thread is now: > > virHashRemoveAll is not enough now. Due to unref reordeing last ref to @srv is > unrefed after virStateCleanup. So we need to virObjectUnref(srv|srvAdm) before > virStateCleanup. Or we can call virThreadPoolFree from virNetServerClose ( > as in the first version of the patch and as Erik suggests) instead > of virHashRemoveAll. > Patches w/ 1. Long pause before GetAllStats (without using [u]sleep) 2. Adjustment to call virNetServerServiceToggle in virNetServerServiceClose (instead of virNetServerDispose) 3. Call virHashRemoveAll in virNetDaemonClose 4. Call virThreadPoolFree in virNetServerClose 5. Perform Unref (adminProgram, srvAdm, qemuProgram, lxcProgram, remoteProgream, and srv) before virNetDaemonClose Still has the virCondWait's - so as Daniel points out there's quite a bit more work to be done. Like most Red Hat engineers - I will not be very active over the next week or so (until the New Year) as it's a holiday break/vacation for us. So unless you have the burning desire to put together some patches and do the work yourself, more thoughts/work will need to wait. John -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list