From f66c9c1996f51a30a5d07eaa011a421b1716b31d Mon Sep 17 00:00:00 2001 From: Jehan Date: Sat, 21 Sep 2024 18:49:32 +0200 Subject: [PATCH] app: fix circle dependency of data attached to an image. I had this case with the palette of an indexed image which had its own reference to the image. So the image would never be freed until the palette is freed, while the palette is freed in GimpImage's dispose() code. Make this a weak reference from GimpData instead. --- app/core/gimpdata.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/core/gimpdata.c b/app/core/gimpdata.c index 5e35aa2ce7..f764f879a8 100644 --- a/app/core/gimpdata.c +++ b/app/core/gimpdata.c @@ -243,6 +243,7 @@ gimp_data_finalize (GObject *object) gimp_id_table_remove (data_id_table, private->ID); g_clear_object (&private->file); + g_clear_weak_pointer (&private->image); if (private->tags) { @@ -987,7 +988,7 @@ gimp_data_set_image (GimpData *data, g_return_if_fail (private->file == NULL); - g_set_object (&private->image, image); + g_set_weak_pointer (&private->image, image); private->writable = writable ? TRUE : FALSE; private->deletable = deletable ? TRUE : FALSE;