Bug#378346: libgail crashes on alpha

Steve Langasek vorlon at debian.org
Sun Nov 5 15:25:16 CET 2006


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.
vorlon at debian.org                                   http://www.debian.org/
-------------- next part --------------
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 <vorlon at debian.org>  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);
       }
   }
 }


More information about the Pkg-gnome-maintainers mailing list