From: Daniel P. Berrangé Date: Thu, 5 Apr 2018 10:40:55 +0000 (+0100) Subject: remote: push check for conn down into remoteClientFreePrivateCallbacks X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=6f9750012ca741b1ed5618b4423712cd59c543d0;p=libvirt.git remote: push check for conn down into remoteClientFreePrivateCallbacks There will shortly be many connection objects, so we should not assume a single check against priv->conn is sufficient. Reviewed-by: John Ferlan Signed-off-by: Daniel P. Berrangé --- diff --git a/src/remote/remote_daemon_dispatch.c b/src/remote/remote_daemon_dispatch.c index 121d114ae3..853e63901b 100644 --- a/src/remote/remote_daemon_dispatch.c +++ b/src/remote/remote_daemon_dispatch.c @@ -1673,6 +1673,11 @@ void remoteRelayConnectionClosedEvent(virConnectPtr conn ATTRIBUTE_UNUSED, int r #define DEREG_CB(conn, eventCallbacks, neventCallbacks, deregFcn, name) \ do { \ size_t i; \ + if (neventCallbacks && !conn) { \ + VIR_WARN("Have %zu %s event callbacks but no connection", \ + neventCallbacks, name); \ + break; \ + } \ for (i = 0; i < neventCallbacks; i++) { \ int callbackID = eventCallbacks[i]->callbackID; \ if (callbackID < 0) { \ @@ -1715,7 +1720,7 @@ remoteClientFreePrivateCallbacks(struct daemonClientPrivate *priv) priv->nqemuEventCallbacks, virConnectDomainQemuMonitorEventDeregister, "qemu monitor"); - if (priv->closeRegistered) { + if (priv->closeRegistered && priv->conn) { if (virConnectUnregisterCloseCallback(priv->conn, remoteRelayConnectionClosedEvent) < 0) VIR_WARN("unexpected close callback event deregister failure"); @@ -1751,9 +1756,7 @@ static void remoteClientCloseFunc(virNetServerClientPtr client) daemonRemoveAllClientStreams(priv->streams); - /* Deregister event delivery callback */ - if (priv->conn) - remoteClientFreePrivateCallbacks(priv); + remoteClientFreePrivateCallbacks(priv); }