summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Chimento <philip.chimento@gmail.com>2018-07-28 01:13:04 +0000
committerPhilip Chimento <philip.chimento@gmail.com>2018-07-28 01:13:04 +0000
commita7dd50e4e3b8b65780cf3cb6282fb483f137e211 (patch)
tree91b981e325e2fd0631948c23266e7a75b1799dcd
parent3670539091a02de93868af869923e54a276bb029 (diff)
parent29adf615baa95a0a4cd0cccd5e1b6364b59443ea (diff)
downloadgobject-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.c15
-rw-r--r--tests/scanner/regress.c22
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);
}