From ed8579029430cb64e107f5bbc846f44da5d3a2ec Mon Sep 17 00:00:00 2001 From: Simon Feltman Date: Fri, 23 Dec 2016 15:15:31 -0800 Subject: regress: Use g_list_free_full and g_list_copy_deep Cleanup which replaces manual loop implementation with API calls when setting the linked list property. https://bugzilla.gnome.org/show_bug.cgi?id=735013 Closes #113 --- tests/scanner/regress.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/tests/scanner/regress.c b/tests/scanner/regress.c index e1da3d17..3ab85644 100644 --- a/tests/scanner/regress.c +++ b/tests/scanner/regress.c @@ -2135,15 +2135,9 @@ regress_test_obj_set_property (GObject *object, case PROP_TEST_OBJ_LIST: case PROP_TEST_OBJ_LIST_OLD: - if (self->list != NULL) - { - for (list = self->list; list != NULL; list = g_list_next (list)) - g_free (list->data); - g_list_free (self->list); - } - self->list = NULL; - for (list = g_value_get_pointer (value); list != NULL; list = g_list_next (list)) - self->list = g_list_append (self->list, g_strdup (list->data)); + g_list_free_full (self->list, g_free); + list = g_value_get_pointer (value); + self->list = g_list_copy_deep (list, (GCopyFunc) g_strdup, NULL); break; case PROP_TEST_OBJ_INT: -- cgit v1.2.1 From 07144de1b8a5e47061324f5fc2166daad4c9c94f Mon Sep 17 00:00:00 2001 From: Simon Feltman Date: Fri, 23 Dec 2016 15:17:52 -0800 Subject: regress: Don't leak in property setter and destructor Clear the string property of RegressTestObj prior to setting within the property setter. Make sure the linked list, hash table, and string properties are cleared during destruction. This fixes trivial memory leaks found with the PyGObject test suite. https://bugzilla.gnome.org/show_bug.cgi?id=735013 Closes #113 --- tests/scanner/regress.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/scanner/regress.c b/tests/scanner/regress.c index 3ab85644..29652caa 100644 --- a/tests/scanner/regress.c +++ b/tests/scanner/regress.c @@ -2153,6 +2153,7 @@ regress_test_obj_set_property (GObject *object, break; case PROP_TEST_OBJ_STRING: + g_clear_pointer (&self->string, g_free); self->string = g_value_dup_string (value); break; @@ -2250,6 +2251,15 @@ regress_test_obj_dispose (GObject *gobject) self->boxed = NULL; } + if (self->list) + { + g_list_free_full (self->list, g_free); + self->list = NULL; + } + + g_clear_pointer (&self->hash_table, g_hash_table_unref); + g_clear_pointer (&self->string, g_free); + /* Chain up to the parent class */ G_OBJECT_CLASS (regress_test_obj_parent_class)->dispose (gobject); } -- cgit v1.2.1 From 29adf615baa95a0a4cd0cccd5e1b6364b59443ea Mon Sep 17 00:00:00 2001 From: Simon Feltman Date: Fri, 23 Dec 2016 15:19:44 -0800 Subject: gimarshallingtests: Don't leak properties in destruction Clear strv, boxed_struct, variant, boxed_glist, and object properties during destruction. This fixes trivial memory leaks found in the PyGObject tests suite. https://bugzilla.gnome.org/show_bug.cgi?id=735013 Closes #113 --- tests/gimarshallingtests.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/tests/gimarshallingtests.c b/tests/gimarshallingtests.c index 4005acae..4465bcb6 100644 --- a/tests/gimarshallingtests.c +++ b/tests/gimarshallingtests.c @@ -5371,15 +5371,12 @@ gi_marshalling_tests_properties_object_finalize (GObject *obj) GIMarshallingTestsPropertiesObject *self; self = GI_MARSHALLING_TESTS_PROPERTIES_OBJECT (obj); - if (self->some_strv != NULL) { - g_strfreev (self->some_strv); - self->some_strv = NULL; - } - - if (self->some_gvalue) { - g_boxed_free (G_TYPE_VALUE, self->some_gvalue); - self->some_gvalue = NULL; - } + g_clear_pointer (&self->some_strv, g_strfreev); + g_clear_pointer (&self->some_boxed_struct, gi_marshalling_tests_boxed_struct_free); + g_clear_pointer (&self->some_variant, g_variant_unref); + g_clear_pointer (&self->some_boxed_glist, g_list_free); + g_clear_pointer (&self->some_gvalue, g_boxed_free); + g_clear_object (&self->some_object); G_OBJECT_CLASS (gi_marshalling_tests_properties_object_parent_class)->finalize (obj); } -- cgit v1.2.1