Hi, all.
I looked over thread for this particular patch again and found resolution is we:
1. make a more sane cleanup order in libvirtd's main function (already done by [1]).
2. rewrite linked series [2] by introducing event loop closing callback (ok)
But there is no resolution on this patch itself if I am not mistaken and
it is not pushed too.
LINKS
[1] [PATCH 0/5] libvirtd: Adjustments to startup and cleanup processing
https://www.redhat.com/archives/libvir-list/2017-November/msg00293.html
[2] [PATCH 0/4] libvirtd: fix hang on termination in qemu driver
https://www.redhat.com/archives/libvir-list/2017-October/msg01134.html
Nikolay
On 30.10.2017 14:14, John Ferlan wrote:
From: Nikolay Shirokovskiy <nshirokovskiy(a)virtuozzo.com>
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 shutdown upon dispose which is triggered
by last daemon object unref at the end of main function. At the same
time qemu driver is shutdown 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.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/rpc/virnetdaemon.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/rpc/virnetdaemon.c b/src/rpc/virnetdaemon.c
index 8c21414897..33bd8e3b06 100644
--- a/src/rpc/virnetdaemon.c
+++ b/src/rpc/virnetdaemon.c
@@ -881,6 +881,7 @@ virNetDaemonClose(virNetDaemonPtr dmn)
virObjectLock(dmn);
virHashForEach(dmn->servers, daemonServerClose, NULL);
+ virHashRemoveAll(dmn->servers);
virObjectUnlock(dmn);
}