mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
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 <nshirokovskiy@virtuozzo.com>
Signed-off-by: Erik Skultety <eskultet@redhat.com>
This commit is contained in:
parent
0b36b0e9ce
commit
ce35122cfe
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user