From f54ed6f7dca0e689cb3cd5f5754451018a46fee8 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 16 Jul 2020 07:49:18 -0400 Subject: [PATCH 01/11] columviewsorter: Add an assertion --- gtk/gtkcolumnviewsorter.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gtk/gtkcolumnviewsorter.c b/gtk/gtkcolumnviewsorter.c index 587731e1cd..fa8cf8607a 100644 --- a/gtk/gtkcolumnviewsorter.c +++ b/gtk/gtkcolumnviewsorter.c @@ -115,6 +115,14 @@ gtk_column_view_sorter_dispose (GObject *object) { GtkColumnViewSorter *self = GTK_COLUMN_VIEW_SORTER (object); + /* The sorter is owned by the columview and is unreffed + * after the columns, so the sequence must be empty at + * this point. + * The sorter can outlive the columview it comes from + * (the model might still have a ref), but that does + * not change the fact that all columns will be gone. + */ + g_assert (g_sequence_is_empty (self->sorters)); g_clear_pointer (&self->sorters, g_sequence_free); G_OBJECT_CLASS (gtk_column_view_sorter_parent_class)->dispose (object); From 2d1135fba66239c16d8d02c1157b6cc983bb07a0 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 16 Jul 2020 08:46:18 -0400 Subject: [PATCH 02/11] applicationaccels: Plug a leak g_list_model_get_item is transfer full. --- gtk/gtkapplicationaccels.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gtk/gtkapplicationaccels.c b/gtk/gtkapplicationaccels.c index de4aafe378..cdbaafe3cb 100644 --- a/gtk/gtkapplicationaccels.c +++ b/gtk/gtkapplicationaccels.c @@ -109,6 +109,7 @@ gtk_application_accels_set_accels_for_action (GtkApplicationAccels *accels, } g_list_store_remove (G_LIST_STORE (accels->shortcuts), i); + g_object_unref (shortcut_i); break; } From df01c5c7a4693258afcd1b20242a663a11abe0cd Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 16 Jul 2020 08:46:44 -0400 Subject: [PATCH 03/11] columnlistitemfactory: Plug a leak g_list_model_get_item is transfer full. --- gtk/gtkcolumnlistitemfactory.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gtk/gtkcolumnlistitemfactory.c b/gtk/gtkcolumnlistitemfactory.c index 0b2151f12f..e6188cb4d4 100644 --- a/gtk/gtkcolumnlistitemfactory.c +++ b/gtk/gtkcolumnlistitemfactory.c @@ -62,10 +62,12 @@ gtk_column_list_item_factory_setup (GtkListItemFactory *factory, { GtkColumnViewColumn *column = g_list_model_get_item (columns, i); - gtk_column_list_item_factory_add_column (self, + gtk_column_list_item_factory_add_column (self, list_item->owner, column, FALSE); + + g_object_unref (column); } } From 497d137fb899d707f279ddb8898334c09eda87ee Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 16 Jul 2020 08:47:05 -0400 Subject: [PATCH 04/11] filechoosernativewin32: Plug a leak g_list_model_get_item is transfer full. --- gtk/gtkfilechoosernativewin32.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gtk/gtkfilechoosernativewin32.c b/gtk/gtkfilechoosernativewin32.c index 68076989fc..7bb3e54b36 100644 --- a/gtk/gtkfilechoosernativewin32.c +++ b/gtk/gtkfilechoosernativewin32.c @@ -906,6 +906,7 @@ gtk_file_chooser_native_win32_show (GtkFileChooserNative *self) filechooser_win32_thread_data_free (data); return FALSE; } + g_object_unref (filter); } self->current_filter = gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (self)); } From c55dd104d43241276295e6a6fd2084ed6d80cfb2 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 16 Jul 2020 08:47:36 -0400 Subject: [PATCH 05/11] placessidebar: Plug a leak g_list_model_get_item is transfer full. --- gtk/gtkplacessidebar.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c index 7c528252e2..e22d1ca188 100644 --- a/gtk/gtkplacessidebar.c +++ b/gtk/gtkplacessidebar.c @@ -767,6 +767,8 @@ add_application_shortcuts (GtkPlacesSidebar *sidebar) GFile *file = g_list_model_get_item (G_LIST_MODEL (sidebar->shortcuts), i); ShortcutData *data; + g_object_unref (file); + if (!should_show_file (sidebar, file)) continue; From 3a4385928644e688c574b2e62781c9057407c767 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 16 Jul 2020 08:47:59 -0400 Subject: [PATCH 06/11] Cosmetics --- gtk/gtkflattenlistmodel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gtk/gtkflattenlistmodel.c b/gtk/gtkflattenlistmodel.c index fe681b265e..f4398d853c 100644 --- a/gtk/gtkflattenlistmodel.c +++ b/gtk/gtkflattenlistmodel.c @@ -300,7 +300,7 @@ gtk_flatten_list_model_add_items (GtkFlattenListModel *self, G_CALLBACK (gtk_flatten_list_model_items_changed_cb), node); node->list = self; - added +=g_list_model_get_n_items (node->model); + added += g_list_model_get_n_items (node->model); } return added; From edb792503b432d2eafc8a8ac16dbc0ca015cc945 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 16 Jul 2020 08:48:09 -0400 Subject: [PATCH 07/11] printunixdialog: Plug a leak g_list_model_get_item is transfer full. --- gtk/gtkprintunixdialog.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gtk/gtkprintunixdialog.c b/gtk/gtkprintunixdialog.c index dab4548b49..38f35a0b87 100644 --- a/gtk/gtkprintunixdialog.c +++ b/gtk/gtkprintunixdialog.c @@ -3009,6 +3009,8 @@ paper_size_changed (GtkDropDown *combo_box, gtk_window_present (GTK_WINDOW (custom_paper_dialog)); G_GNUC_END_IGNORE_DEPRECATIONS + g_object_unref (page_setup); + return; } From 6c1217dd93a4f3384aff67dd33308905562acf0a Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 16 Jul 2020 08:48:36 -0400 Subject: [PATCH 08/11] filter tests: Plug a leak g_list_model_get_item is transfer full. --- testsuite/gtk/filter.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/testsuite/gtk/filter.c b/testsuite/gtk/filter.c index 5c5fd707c7..2e88a21f7a 100644 --- a/testsuite/gtk/filter.c +++ b/testsuite/gtk/filter.c @@ -28,8 +28,11 @@ get (GListModel *model, guint position) { GObject *object = g_list_model_get_item (model, position); + guint ret; g_assert (object != NULL); - return GPOINTER_TO_UINT (g_object_get_qdata (object, number_quark)); + ret = GPOINTER_TO_UINT (g_object_get_qdata (object, number_quark)); + g_object_unref (object); + return ret; } static char * From f94f325636659e229fe6ecee1cbbbee83343b345 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 16 Jul 2020 08:48:56 -0400 Subject: [PATCH 09/11] filterlistmodel tests: Plug a leak g_list_model_get_item is transfer full. --- testsuite/gtk/filterlistmodel-exhaustive.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/testsuite/gtk/filterlistmodel-exhaustive.c b/testsuite/gtk/filterlistmodel-exhaustive.c index 00be63ba08..ec1cbecc32 100644 --- a/testsuite/gtk/filterlistmodel-exhaustive.c +++ b/testsuite/gtk/filterlistmodel-exhaustive.c @@ -38,6 +38,8 @@ g_assertion_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, _s); \ g_free (_s); \ } \ + g_object_unref (o1); \ + g_object_unref (o2); \ } \ }G_STMT_END From ee96bc71855642b3f9090cfc2345513010321637 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 16 Jul 2020 08:49:22 -0400 Subject: [PATCH 10/11] multiselection tests: Plug a leak g_list_model_get_item is transfer full. --- testsuite/gtk/multiselection.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/testsuite/gtk/multiselection.c b/testsuite/gtk/multiselection.c index 970a6c4a6a..7d67f3ca3d 100644 --- a/testsuite/gtk/multiselection.c +++ b/testsuite/gtk/multiselection.c @@ -29,8 +29,11 @@ get (GListModel *model, guint position) { GObject *object = g_list_model_get_item (model, position); + guint ret; g_assert (object != NULL); - return GPOINTER_TO_UINT (g_object_get_qdata (object, number_quark)); + ret = GPOINTER_TO_UINT (g_object_get_qdata (object, number_quark)); + g_object_unref (object); + return ret; } static char * From 87b5eadb7c3c9540b34019854d96c9b8da147bda Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 16 Jul 2020 08:49:38 -0400 Subject: [PATCH 11/11] treesorter tests: Add a comment This looks like a leak, but isn't one. Add a comment to that effect. --- testsuite/gtk/treesorter.c | 1 + 1 file changed, 1 insertion(+) diff --git a/testsuite/gtk/treesorter.c b/testsuite/gtk/treesorter.c index 6d1e314d30..59a32b5e25 100644 --- a/testsuite/gtk/treesorter.c +++ b/testsuite/gtk/treesorter.c @@ -69,6 +69,7 @@ model_to_string (GListModel *model) if (i > 0) g_string_append (string, " "); g_string_append_printf (string, "%u", get_with_parents (object)); + /* no unref since get_with_parents consumes the ref */ } return g_string_free (string, FALSE);