PR Python/12212

Phil Muldoon pmuldoon@redhat.com
Tue Nov 16 10:51:00 GMT 2010


This patches fixes a case where the API can request the currently
selected thread from GDB when no inferior is loaded.  This triggers an
error via assert.  Handle it in Python code instead.

Cheers,

Phil

--

2010-11-16  Phil Muldoon  <pmuldoon@redhat.com>

        PR python/12212 

	* python/py-infthread.c (gdbpy_selected_thread): Raise an error if
	find_thread_object returns NULL.
	* python/py-inferior.c (find_thread_object): Check if PIDGET
	returns 0.

2010-11-16  Phil Muldoon  <pmuldoon@redhat.com>

        PR python/12212 

	* gdb.python/python.exp: Check that selected_thread raises an
          error when no inferior is loaded.

--

diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c
index b1ddb168..6382dab 100644
--- a/gdb/python/py-inferior.c
+++ b/gdb/python/py-inferior.c
@@ -130,6 +130,9 @@ find_thread_object (ptid_t ptid)
   PyObject *inf_obj;
 
   pid = PIDGET (ptid);
+  if (pid == 0)
+    return NULL;
+
   inf_obj = find_inferior_object (pid);
 
   if (inf_obj)
diff --git a/gdb/python/py-infthread.c b/gdb/python/py-infthread.c
index 86aba50..188f8bd 100644
--- a/gdb/python/py-infthread.c
+++ b/gdb/python/py-infthread.c
@@ -175,13 +175,16 @@ gdbpy_selected_thread (PyObject *self, PyObject *args)
   PyObject *thread_obj;
 
   thread_obj = (PyObject *) find_thread_object (inferior_ptid);
-  if (thread_obj)
+
+  if (!thread_obj)
     {
-      Py_INCREF (thread_obj);
-      return thread_obj;
+      PyErr_SetString (PyExc_RuntimeError,
+		       _("Cannot return currently selected thread."));
+      return NULL;
     }
 
-  Py_RETURN_NONE;
+  Py_INCREF (thread_obj);
+  return thread_obj;
 }
 
 
diff --git a/gdb/testsuite/gdb.python/python.exp b/gdb/testsuite/gdb.python/python.exp
index dd9175a..a860dd1 100644
--- a/gdb/testsuite/gdb.python/python.exp
+++ b/gdb/testsuite/gdb.python/python.exp
@@ -146,6 +146,9 @@ gdb_test_no_output "python a = gdb.execute('help', to_string=True)" "collect hel
 
 gdb_test "python print a" ".*aliases -- Aliases of other commands.*" "verify help to uiout"
 
+# Test PR 12212, using InfThread.selected_thread() when no inferior is
+# loaded.
+gdb_test "python print gdb.selected_thread()" "RuntimeError: Cannot return currently selected thread.*" "selected_thread and no inferior"
 # Start with a fresh gdb.
 clean_restart ${testfile}
 



More information about the Gdb-patches mailing list