diff options
author | Philip Chimento <philip.chimento@gmail.com> | 2018-07-28 01:13:04 +0000 |
---|---|---|
committer | Philip Chimento <philip.chimento@gmail.com> | 2018-07-28 01:13:04 +0000 |
commit | a7dd50e4e3b8b65780cf3cb6282fb483f137e211 (patch) | |
tree | 91b981e325e2fd0631948c23266e7a75b1799dcd | |
parent | 3670539091a02de93868af869923e54a276bb029 (diff) | |
parent | 29adf615baa95a0a4cd0cccd5e1b6364b59443ea (diff) | |
download | gobject-introspection-a7dd50e4e3b8b65780cf3cb6282fb483f137e211.tar.gz |
Merge branch '113-fix-memory-leaks' into 'master'
Resolve "Memory leaks in GI regress and marshalling tests property setters"
Closes #113
See merge request GNOME/gobject-introspection!55
-rw-r--r-- | tests/gimarshallingtests.c | 15 | ||||
-rw-r--r-- | tests/scanner/regress.c | 22 |
2 files changed, 19 insertions, 18 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); } diff --git a/tests/scanner/regress.c b/tests/scanner/regress.c index e1da3d17..29652caa 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: @@ -2159,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; @@ -2256,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); } |