diff options
author | Přemysl Janouch <p.janouch@gmail.com> | 2012-08-11 21:00:38 +0200 |
---|---|---|
committer | Přemysl Janouch <p.janouch@gmail.com> | 2012-08-12 01:01:13 +0200 |
commit | bb224bafd043e07fd18e3d8cda2c3f41c132e507 (patch) | |
tree | 2332e4a1228bb43324ce56bc8253595e979ee11f /liblogdiag/ld-diagram.c | |
parent | f55afb6542b9eb39e56a32dc8a18002ad680ad41 (diff) | |
download | logdiag-bb224bafd043e07fd18e3d8cda2c3f41c132e507.tar.gz logdiag-bb224bafd043e07fd18e3d8cda2c3f41c132e507.tar.xz logdiag-bb224bafd043e07fd18e3d8cda2c3f41c132e507.zip |
More fixing.
* Fix a resource leak in LdLibrary.
* Add missing property change notifiers
to ld_diagram_object_{get,set}_storage().
* Don't unref the parameter in ld_symbol_category_remove_{symbol,subcategory}
if it wasn't actually removed from the internal list.
* Fix a cyclic dependency problem in LdDiagram.
Diffstat (limited to 'liblogdiag/ld-diagram.c')
-rw-r--r-- | liblogdiag/ld-diagram.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/liblogdiag/ld-diagram.c b/liblogdiag/ld-diagram.c index cd483ec..46f94df 100644 --- a/liblogdiag/ld-diagram.c +++ b/liblogdiag/ld-diagram.c @@ -804,11 +804,18 @@ ld_diagram_end_user_action (LdDiagram *self) } static void +action_finalize_notify_cb (ObjectActionData *data, LdDiagram *self) +{ + data->self = NULL; +} + +static void on_object_action_remove (gpointer user_data) { ObjectActionData *data; data = user_data; + g_return_if_fail (data->self != NULL); ld_diagram_remove_object (data->self, data->object); } @@ -818,6 +825,7 @@ on_object_action_insert (gpointer user_data) ObjectActionData *data; data = user_data; + g_return_if_fail (data->self != NULL); ld_diagram_insert_object (data->self, data->object, data->pos); } @@ -827,7 +835,8 @@ on_object_action_destroy (gpointer user_data) ObjectActionData *data; data = user_data; - g_object_unref (data->self); + g_object_weak_unref (G_OBJECT (data->self), + (GWeakNotify) action_finalize_notify_cb, data); g_object_unref (data->object); g_slice_free (ObjectActionData, data); } @@ -891,7 +900,9 @@ ld_diagram_insert_object (LdDiagram *self, LdDiagramObject *object, gint pos) install_object (object, self); action_data = g_slice_new (ObjectActionData); - action_data->self = g_object_ref (self); + action_data->self = self; + g_object_weak_ref (G_OBJECT (self), + (GWeakNotify) action_finalize_notify_cb, action_data); action_data->object = g_object_ref (object); action_data->pos = pos; @@ -938,7 +949,9 @@ ld_diagram_remove_object (LdDiagram *self, LdDiagramObject *object) uninstall_object (object, self); action_data = g_slice_new (ObjectActionData); - action_data->self = g_object_ref (self); + action_data->self = self; + g_object_weak_ref (G_OBJECT (self), + (GWeakNotify) action_finalize_notify_cb, action_data); action_data->object = g_object_ref (object); action_data->pos = pos; |