From: Nikolay Shirokovskiy Date: Thu, 3 Mar 2016 08:01:15 +0000 (+0300) Subject: daemon: fixup refcounting in close callback handling X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=ce35122cfeb43c92d4cbea83530cd13144cd591c;p=libvirt.git daemon: fixup refcounting in close callback handling remoteDispatchConnectCloseCallbackRegister introduced in f484310a has problems. It refcounts network client object and in case of NOOP driver operations for registering/unregistering close callback (any driver except for vz) nobody will unref it later. As a result, client connection will not be disposed and driver connection will not be closed. The fix is easy. We don't need to refcount at all. We don't get a dangling pointer because in remoteClientFreeFunc, which is called upon disposing this network client object, we unregister the close callback. Signed-off-by: Nikolay Shirokovskiy Signed-off-by: Erik Skultety --- diff --git a/daemon/remote.c b/daemon/remote.c index 04d8ada729..17783fa652 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -3382,11 +3382,9 @@ remoteDispatchConnectCloseCallbackRegister(virNetServerPtr server ATTRIBUTE_UNUS goto cleanup; } - // on behalf of close callback - virObjectRef(client); if (virConnectRegisterCloseCallback(priv->conn, remoteRelayConnectionClosedEvent, - client, virObjectFreeCallback) < 0) + client, NULL) < 0) goto cleanup; priv->closeRegistered = true;