[Spice-devel] [PATCH spice-server 4/4] red-client: Make sure MainChannelClient is freed as last
Christophe Fergeau
cfergeau at redhat.com
Thu Aug 31 15:01:58 UTC 2017
On Wed, Aug 30, 2017 at 01:51:28PM +0100, Frediano Ziglio wrote:
> MainChannelClient is used by other clients to store some data
> so should not disappear if other clients are still present.
> Keep a owning reference to it and release after RedClient is
> released.
>
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> ---
> server/red-client.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/server/red-client.c b/server/red-client.c
> index 36577dab..7e1394e5 100644
> --- a/server/red-client.c
> +++ b/server/red-client.c
> @@ -108,6 +108,10 @@ red_client_finalize (GObject *object)
> {
> RedClient *self = RED_CLIENT(object);
>
> + if (self->mcc) {
> + g_object_unref(self->mcc);
> + self->mcc = NULL;
> + }
This could be g_clear_object(&self->mcc);
> spice_debug("release client=%p", self);
> pthread_mutex_destroy(&self->lock);
>
> @@ -314,7 +318,8 @@ MainChannelClient *red_client_get_main(RedClient *client)
>
> void red_client_set_main(RedClient *client, MainChannelClient *mcc)
> {
> - client->mcc = mcc;
> + spice_assert(client->mcc == NULL);
Why not
if (client->mcc != NULL) {
g_warn_if_reached();
g_object_unref(client->mcc);
}
client->mcc = g_object_ref(mcc);
?
Acked-by: Christophe Fergeau <cfergeau at redhat.com>
More information about the Spice-devel
mailing list