From ce35122cfeb43c92d4cbea83530cd13144cd591c Mon Sep 17 00:00:00 2001 From: Nikolay Shirokovskiy Date: Thu, 3 Mar 2016 11:01:15 +0300 Subject: [PATCH] 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 --- daemon/remote.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) 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; -- 2.47.2