On 11/07/18 13:30, Frediano Ziglio wrote: > Leak detectors did not manage to find leaks, possibly as double list > have all elements likely with a pointer to them. > The reference from the agent is necessary for inserting it into > the list. > > Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> > --- > server/reds.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/server/reds.c b/server/reds.c > index f1e34529a..85043a88d 100644 > --- a/server/reds.c > +++ b/server/reds.c > @@ -3132,6 +3132,7 @@ static int spice_server_char_device_add_interface(SpiceServer *reds, > return -1; > } > dev_state = attach_to_red_agent(reds, char_device); > + g_object_ref(dev_state); > } > #ifdef USE_SMARTCARD > else if (strcmp(char_device->subtype, SUBTYPE_SMARTCARD) == 0) { > @@ -3682,6 +3683,19 @@ SPICE_GNUC_VISIBLE void spice_server_destroy(SpiceServer *reds) > } > reds_cleanup_net(reds); > g_clear_object(&reds->agent_dev); > + > + // NOTE: don't replace with g_list_free_full as this function that passed callback > + // don't change the list while g_object_unref in this case will change it. > + RedCharDevice *dev; > + GLIST_FOREACH(reds->char_devices, RedCharDevice, dev) { > + g_object_unref(dev); > + } > + g_list_free(reds->char_devices); > + reds->char_devices = NULL; > + > + g_list_free(reds->channels); > + reds->channels = NULL; > + g_list_free() + NULL can be replaced with g_clear_pointer() -- Eduardo de Barros Lima (Etrunko) Software Engineer - RedHat etrunko@xxxxxxxxxx _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel