forwarded 378346 http://bugzilla.gnome.org/show_bug.cgi?id=325759 tags = 378346 fixed-upstream patch thanks
On Sun, Nov 05, 2006 at 03:49:01AM -0800, Steve Langasek wrote: > On Mon, Oct 16, 2006 at 04:42:30PM +0200, Loïc Minier wrote: > > I suggest you install libgail-dbg, and libgtk2.0-0-dbg to get a nicer > > backtrace. Could you try rebuilding against Gtk 2.10 / Gail 1.9 from > > experimental? This would permit isolating the fix and perhaps > > backporting it if it's fixed in 1.9. > Installing gtk 2.10 + gail 1.9 (and recompiling gtkhml3.8 against the new > libgail) fixes the crash in my test case. And, here's the isolated fix for the bug. Thanks, -- Steve Langasek Give me a lever long enough and a Free OS Debian Developer to set it on, and I can move the world. [EMAIL PROTECTED] http://www.debian.org/
diff -u gail-1.8.11/debian/changelog gail-1.8.11/debian/changelog --- gail-1.8.11/debian/changelog +++ gail-1.8.11/debian/changelog @@ -1,3 +1,12 @@ +gail (1.8.11-2.1) unstable; urgency=high + + * Non-maintainer upload. + * High-urgency upload for RC bugfix. + * Backport patch from gail 1.9.3 to fix upstream bug #325759; + closes: #378346. + + -- Steve Langasek <[EMAIL PROTECTED]> Sun, 5 Nov 2006 05:31:59 -0800 + gail (1.8.11-2) unstable; urgency=low * Bump build-deps to libgtk2.0-dev >= 2.8.17-1, liborbit2-dev >= 1:2.14.0-1, only in patch2: unchanged: --- gail-1.8.11.orig/gail/gailtreeview.c +++ gail-1.8.11/gail/gailtreeview.c @@ -336,6 +336,7 @@ GList** list, gboolean live_only); static AtkObject * get_header_from_column (GtkTreeViewColumn *tv_col); +static gboolean idle_garbage_collect_cell_data (gpointer data); static gboolean garbage_collect_cell_data (gpointer data); static GailWidgetClass *parent_class = NULL; @@ -3489,7 +3490,7 @@ if (!gailview->garbage_collection_pending) { gailview->garbage_collection_pending = TRUE; gailview->idle_garbage_collect_id = - g_idle_add (garbage_collect_cell_data, gailview); + g_idle_add (idle_garbage_collect_cell_data, gailview); } } } @@ -3595,6 +3596,32 @@ } static gboolean +idle_garbage_collect_cell_data (gpointer data) +{ + GailTreeView *tree_view; + + GDK_THREADS_ENTER (); + g_assert (GAIL_IS_TREE_VIEW (data)); + tree_view = (GailTreeView *)data; + + /* this is the idle handler (only one instance allowed), so + * we can safely delete it. + */ + tree_view->garbage_collection_pending = FALSE; + tree_view->idle_garbage_collect_id = 0; + + tree_view->garbage_collection_pending = garbage_collect_cell_data (data); + + GDK_THREADS_LEAVE (); + + /* N.B.: if for some reason another handler has re-enterantly been queued + * while this handler was being serviced, it has its own gsource, therefore this handler + * should always return FALSE. + */ + return FALSE; +} + +static gboolean garbage_collect_cell_data (gpointer data) { GailTreeView *tree_view; @@ -3606,7 +3633,11 @@ temp_list = g_list_copy (tree_view->cell_data); tree_view->garbage_collection_pending = FALSE; - tree_view->idle_garbage_collect_id = 0; + if (tree_view->idle_garbage_collect_id != 0) + { + g_source_remove (tree_view->idle_garbage_collect_id); + tree_view->idle_garbage_collect_id = 0; + } /* Must loop through them all */ while (temp_list != NULL) @@ -4020,7 +4051,7 @@ if (!cell_info->view->garbage_collection_pending) { cell_info->view->garbage_collection_pending = TRUE; cell_info->view->idle_garbage_collect_id = - g_idle_add (garbage_collect_cell_data, cell_info->view); + g_idle_add (idle_garbage_collect_cell_data, cell_info->view); } } }