]> xenbits.xensource.com Git - libvirt.git/commitdiff
daemon: fixup refcounting in close callback handling
authorNikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
Thu, 3 Mar 2016 08:01:15 +0000 (11:01 +0300)
committerErik Skultety <eskultet@redhat.com>
Thu, 3 Mar 2016 10:02:11 +0000 (11:02 +0100)
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 <nshirokovskiy@virtuozzo.com>
Signed-off-by: Erik Skultety <eskultet@redhat.com>
daemon/remote.c

index 04d8ada7296d9f17d35070170371e4233a25fb18..17783fa652978fcec8a90d35fbb967a09f967581 100644 (file)
@@ -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;