diff -up gtk+-2.14.2/modules/other/gail/gailcell.c.gail-leaks gtk+-2.14.2/modules/other/gail/gailcell.c --- gtk+-2.14.2/modules/other/gail/gailcell.c.gail-leaks 2008-09-19 00:55:50.000000000 -0400 +++ gtk+-2.14.2/modules/other/gail/gailcell.c 2008-09-19 00:56:24.000000000 -0400 @@ -118,6 +118,7 @@ gail_cell_destroyed (GtkWidget *wi * GtkWidget. We set the pointer location to NULL; */ cell->widget = NULL; + g_signal_handlers_disconnect_by_func (widget, gail_cell_destroyed, cell); } static void diff -up gtk+-2.14.2/modules/other/gail/gailtreeview.c.gail-leaks gtk+-2.14.2/modules/other/gail/gailtreeview.c --- gtk+-2.14.2/modules/other/gail/gailtreeview.c.gail-leaks 2008-09-19 00:55:02.000000000 -0400 +++ gtk+-2.14.2/modules/other/gail/gailtreeview.c 2008-09-19 00:55:39.000000000 -0400 @@ -3667,12 +3667,12 @@ static gboolean garbage_collect_cell_data (gpointer data) { GailTreeView *tree_view; - GList *temp_list; + GList *temp_list, *list; GailTreeViewCellInfo *cell_info; g_assert (GAIL_IS_TREE_VIEW (data)); tree_view = (GailTreeView *)data; - temp_list = g_list_copy (tree_view->cell_data); + list = g_list_copy (tree_view->cell_data); tree_view->garbage_collection_pending = FALSE; if (tree_view->idle_garbage_collect_id != 0) @@ -3682,6 +3682,7 @@ garbage_collect_cell_data (gpointer data } /* Must loop through them all */ + temp_list = list; while (temp_list != NULL) { cell_info = temp_list->data; @@ -3696,7 +3697,7 @@ garbage_collect_cell_data (gpointer data } temp_list = temp_list->next; } - g_list_free (temp_list); + g_list_free (list); return tree_view->garbage_collection_pending; }