[PATCH] daemon: fixup refcounting in close callback handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



remoteDispatchConnectCloseCallbackRegister introduced in
f484310add53ebdc26a6fdcb88bc398750325b7e has problems. It refcounts
network client object and in case of NOOP driver operations
for close callback registering/unregistering (any driveres besides
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
dangling pointer because in remoteClientFreeFunc which is called
upon disposing this network client object we unregistering close
callback.

Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@xxxxxxxxxxxxx>
---
 daemon/remote.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/daemon/remote.c b/daemon/remote.c
index 04d8ada..17783fa 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;
-- 
1.8.3.1

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]