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;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
// on behalf of close callback
|
|
||||||
virObjectRef(client);
|
|
||||||
if (virConnectRegisterCloseCallback(priv->conn,
|
if (virConnectRegisterCloseCallback(priv->conn,
|
||||||
remoteRelayConnectionClosedEvent,
|
remoteRelayConnectionClosedEvent,
|
||||||
client, virObjectFreeCallback) < 0)
|
client, NULL) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
priv->closeRegistered = true;
|
priv->closeRegistered = true;
|
||||||
|
Loading…
Reference in New Issue
Block a user