File gdb-btrobust.patch of Package gdb.783

This should fix the error  with glib.  An error message will still be
printed, but a default backtrace will occur in this case.

--

Index: gdb-7.8.90.20150214/gdb/python/py-framefilter.c
===================================================================
--- gdb-7.8.90.20150214.orig/gdb/python/py-framefilter.c	2015-02-14 17:35:12.277653200 +0100
+++ gdb-7.8.90.20150214/gdb/python/py-framefilter.c	2015-02-14 17:36:15.737953789 +0100
@@ -1506,6 +1506,7 @@ gdbpy_apply_frame_filter (const struct e
   volatile struct gdb_exception except;
   PyObject *item;
   htab_t levels_printed;
+  int count_printed = 0;
 
   if (!gdb_python_initialized)
     return EXT_LANG_BT_NO_FILTERS;
@@ -1525,24 +1526,7 @@ gdbpy_apply_frame_filter (const struct e
   iterable = bootstrap_python_frame_filters (frame, frame_low, frame_high);
 
   if (iterable == NULL)
-    {
-      /* Normally if there is an error GDB prints the exception,
-	 abandons the backtrace and exits.  The user can then call "bt
-	 no-filters", and get a default backtrace (it would be
-	 confusing to automatically start a standard backtrace halfway
-	 through a Python filtered backtrace).  However in the case
-	 where GDB cannot initialize the frame filters (most likely
-	 due to incorrect auto-load paths), GDB has printed nothing.
-	 In this case it is OK to print the default backtrace after
-	 printing the error message.  GDB returns EXT_LANG_BT_NO_FILTERS
-	 here to signify there are no filters after printing the
-	 initialization error.  This return code will trigger a
-	 default backtrace.  */
-
-      gdbpy_print_stack ();
-      do_cleanups (cleanups);
-      return EXT_LANG_BT_NO_FILTERS;
-    }
+    goto error_nothing_printed;
 
   /* If iterable is None, then there are no frame filters registered.
      If this is the case, defer to default GDB printing routines in MI
@@ -1573,15 +1557,40 @@ gdbpy_apply_frame_filter (const struct e
 	 error and continue with other frames.  */
       if (success == EXT_LANG_BT_ERROR)
 	gdbpy_print_stack ();
+
+      count_printed++;
     }
 
   if (item == NULL && PyErr_Occurred ())
-    goto error;
+    {
+      if (count_printed > 0)
+	goto error;
+      else
+	goto error_nothing_printed;
+    }
 
  done:
   do_cleanups (cleanups);
   return success;
 
+  /* Normally if there is an error GDB prints the exception,
+     abandons the backtrace and exits.  The user can then call "bt
+     no-filters", and get a default backtrace (it would be
+     confusing to automatically start a standard backtrace halfway
+     through a Python filtered backtrace).  However in the case
+     where GDB cannot initialize the frame filters (most likely
+     due to incorrect auto-load paths), GDB has printed nothing.
+     In this case it is OK to print the default backtrace after
+     printing the error message.  GDB returns EXT_LANG_BT_NO_FILTERS
+     here to signify there are no filters after printing the
+     initialization error.  This return code will trigger a
+     default backtrace.  */
+
+ error_nothing_printed:
+  gdbpy_print_stack ();
+  do_cleanups (cleanups);
+  return EXT_LANG_BT_NO_FILTERS;
+
   /* Exit and abandon backtrace on error, printing the exception that
      is set.  */
  error: