From 1fd1b7661055577071aab36653eb8f2c2ddda804 Mon Sep 17 00:00:00 2001 From: "xinhua.Cao" Date: Mon, 13 Nov 2017 21:07:58 +0800 Subject: [PATCH] remote: Move the call to remoteClientFreePrivateCallbacks from FreeFunc to CloseFunc Still because of commit id 'fe8f1c8b' where we generate a REF for the Register and that's transparent to the consumer (e.g. how would they know they need to ensure that Deregister is called), thus the purpose of this patch is to find a way to Deregister if it's determined that the consumer hasn't by the time of the "last" REF we'd have. This solution to this problem is to alter the processing to have the remoteClientCloseFunc handle performing the Deregister calls instead of the remoteClientFreeFunc because there's no way FreeFunc would be called unless the Deregister was already called. --- daemon/remote.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/daemon/remote.c b/daemon/remote.c index 2dcec1ea5a..c2111ae378 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -1738,11 +1738,9 @@ void remoteClientFreeFunc(void *data) { struct daemonClientPrivate *priv = data; - /* Deregister event delivery callback */ - if (priv->conn) { - remoteClientFreePrivateCallbacks(priv); + if (priv->conn) virConnectClose(priv->conn); - } + VIR_FREE(priv); } @@ -1752,6 +1750,10 @@ static void remoteClientCloseFunc(virNetServerClientPtr client) struct daemonClientPrivate *priv = virNetServerClientGetPrivateData(client); daemonRemoveAllClientStreams(priv->streams); + + /* Deregister event delivery callback */ + if (priv->conn) + remoteClientFreePrivateCallbacks(priv); }