GNOME Bugzilla – Bug 774706
GtkNotebook does not unref all GtkLabel it creates
Last modified: 2018-05-02 17:46:41 UTC
After setting GOBJECT_DEBUG=objects comparing the outputs of the following program run with ITERATIONS set to 2 and 1: #include <gtk/gtk.h> #ifndef ITERATIONS #define ITERATIONS 2 #endif int main (int argc, char *argv[]) { int i; if (gtk_init_check (&argc, &argv)) for (i = 0; i < ITERATIONS; ++i) { GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget *notebook = gtk_notebook_new (); GtkWidget *page = gtk_drawing_area_new (); gtk_container_add (GTK_CONTAINER (window), notebook); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, NULL); gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), FALSE); gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), TRUE); gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), FALSE); gtk_widget_destroy (window); } return 0; } the number of objects alive at exit increases for the presence of few GtkLabel objects. The problem is here: https://git.gnome.org/browse/gtk+/tree/gtk/gtknotebook.c?h=gtk-3-22#n6967 page->tab_label is parented to the notebook which implements GtkContainer::remove to remove children (pages), but does nothing with tab_label, so it is wrong to call gtk_widget_destroy here because it does not properly complete the destruction.
Since you seem very good at finding and analysing issues like this, it'd be great if you could apply that detailed, existing knowledge to writing patches to fix them. :)
-- GitLab Migration Automatic Message -- This bug has been migrated to GNOME's GitLab instance and has been closed from further activity. You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.gnome.org/GNOME/gtk/issues/706.