* python/python.c (gdbpy_print_stack): Call begin_line and
authorTom Tromey <tromey@redhat.com>
Thu, 28 Feb 2013 19:25:42 +0000 (19:25 +0000)
committerTom Tromey <tromey@redhat.com>
Thu, 28 Feb 2013 19:25:42 +0000 (19:25 +0000)
fprintf_filtered inside TRY_CATCH.

gdb/ChangeLog
gdb/python/python.c

index e785983766907ab792064385448d821bf439e143..8194eeae192159d20ffb971f5ab8452670322281 100644 (file)
@@ -1,3 +1,8 @@
+2013-02-28  Tom Tromey  <tromey@redhat.com>
+
+       * python/python.c (gdbpy_print_stack): Call begin_line and
+       fprintf_filtered inside TRY_CATCH.
+
 2013-02-28  Tom Tromey  <tromey@redhat.com>
 
        * python/python.c (gdbpy_find_pc_line): Call find_pc_line
index e2c19b3d3a0565f339cd6983304e86123e8b7fad..405eb5b6551eba9ab6b57924863297233ecfcfcc 100644 (file)
@@ -1043,6 +1043,8 @@ gdbpy_flush (PyObject *self, PyObject *args, PyObject *kw)
 void
 gdbpy_print_stack (void)
 {
+  volatile struct gdb_exception except;
+
   /* Print "none", just clear exception.  */
   if (gdbpy_should_print_stack == python_excp_none)
     {
@@ -1055,7 +1057,10 @@ gdbpy_print_stack (void)
       /* PyErr_Print doesn't necessarily end output with a newline.
         This works because Python's stdout/stderr is fed through
         printf_filtered.  */
-      begin_line ();
+      TRY_CATCH (except, RETURN_MASK_ALL)
+       {
+         begin_line ();
+       }
     }
   /* Print "message", just error print message.  */
   else
@@ -1068,17 +1073,21 @@ gdbpy_print_stack (void)
       /* Fetch the error message contained within ptype, pvalue.  */
       msg = gdbpy_exception_to_string (ptype, pvalue);
       type = gdbpy_obj_to_string (ptype);
-      if (msg == NULL)
+
+      TRY_CATCH (except, RETURN_MASK_ALL)
        {
-         /* An error occurred computing the string representation of the
-            error message.  */
-         fprintf_filtered (gdb_stderr,
-                           _("Error occurred computing Python error"   \
-                             "message.\n"));
+         if (msg == NULL)
+           {
+             /* An error occurred computing the string representation of the
+                error message.  */
+             fprintf_filtered (gdb_stderr,
+                               _("Error occurred computing Python error" \
+                                 "message.\n"));
+           }
+         else
+           fprintf_filtered (gdb_stderr, "Python Exception %s %s: \n",
+                             type, msg);
        }
-      else
-       fprintf_filtered (gdb_stderr, "Python Exception %s %s: \n",
-                         type, msg);
 
       Py_XDECREF (ptype);
       Py_XDECREF (pvalue);