Good, but I think the commit log is a little bit misleading. After reading the summary, I thought you were fixing a leak. But you're actually just moving the freeing of these variables to finalize instead of doing it in detach. I'd prefer something more like: ----- sound: free SndChannel data in finalize() Move the freeing of SndChannel data members from snd_detach_common() to the finalize function to encapsulate things a bit more cleanly. It doesn't really change the behavior or order of destruction since snd_detach_common() destroys the channel. ----- Acked-by: Jonathon Jongsma <jjongsma@xxxxxxxxxx> On Tue, 2016-12-20 at 17:44 +0000, Frediano Ziglio wrote: > Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> > --- > server/sound.c | 19 ++++++++++++++++--- > 1 file changed, 16 insertions(+), 3 deletions(-) > > diff --git a/server/sound.c b/server/sound.c > index a645b60..427ae8f 100644 > --- a/server/sound.c > +++ b/server/sound.c > @@ -1436,10 +1436,26 @@ snd_channel_init(SndChannel *self) > } > > static void > +snd_channel_finalize(GObject *object) > +{ > + SndChannel *channel = SND_CHANNEL(object); > + > + remove_channel(channel); > + > + free(channel->volume.volume); > + channel->volume.volume = NULL; > + > + G_OBJECT_CLASS(snd_channel_parent_class)->finalize(object); > +} > + > +static void > snd_channel_class_init(SndChannelClass *klass) > { > + GObjectClass *object_class = G_OBJECT_CLASS(klass); > RedChannelClass *channel_class = RED_CHANNEL_CLASS(klass); > > + object_class->finalize = snd_channel_finalize; > + > channel_class->config_socket = snd_channel_config_socket; > channel_class->alloc_recv_buf = > snd_channel_client_alloc_recv_buf; > channel_class->release_recv_buf = > snd_channel_client_release_recv_buf; > @@ -1555,10 +1571,7 @@ static void snd_detach_common(SndChannel > *channel) > } > RedsState *reds = red_channel_get_server(RED_CHANNEL(channel)); > > - remove_channel(channel); > reds_unregister_channel(reds, RED_CHANNEL(channel)); > - free(channel->volume.volume); > - channel->volume.volume = NULL; > red_channel_destroy(RED_CHANNEL(channel)); > } > _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel