aboutsummaryrefslogtreecommitdiff
path: root/gdb/python/py-threadevent.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/python/py-threadevent.c')
-rw-r--r--gdb/python/py-threadevent.c36
1 files changed, 14 insertions, 22 deletions
diff --git a/gdb/python/py-threadevent.c b/gdb/python/py-threadevent.c
index d6aa946..1bc2fb0 100644
--- a/gdb/python/py-threadevent.c
+++ b/gdb/python/py-threadevent.c
@@ -20,48 +20,40 @@
#include "infrun.h"
#include "gdbthread.h"
-/* thread events can either be thread specific or process wide. If gdb is
- running in non-stop mode then the event is thread specific, otherwise
- it is process wide.
- This function returns the currently stopped thread in non-stop mode and
- Py_None otherwise. In each case it returns a borrowed reference. */
+/* See py-event.h. */
-static PyObject *get_event_thread (void)
- CPYCHECKER_RETURNS_BORROWED_REF;
-
-static PyObject *
-get_event_thread (void)
+PyObject *
+py_get_event_thread (ptid_t ptid)
{
- PyObject *thread;
+ PyObject *pythread;
if (non_stop)
- thread = (PyObject *) thread_to_thread_object (inferior_thread ());
+ {
+ thread_info *thread = find_thread_ptid (ptid);
+ if (thread != nullptr)
+ pythread = (PyObject *) thread_to_thread_object (thread);
+ }
else
- thread = Py_None;
+ pythread = Py_None;
- if (!thread)
+ if (!pythread)
{
PyErr_SetString (PyExc_RuntimeError, "Could not find event thread");
return NULL;
}
- return thread;
+ return pythread;
}
gdbpy_ref<>
create_thread_event_object (PyTypeObject *py_type, PyObject *thread)
{
+ gdb_assert (thread != NULL);
+
gdbpy_ref<> thread_event_obj (create_event_object (py_type));
if (thread_event_obj == NULL)
return NULL;
- if (thread == NULL)
- {
- thread = get_event_thread ();
- if (!thread)
- return NULL;
- }
-
if (evpy_add_attribute (thread_event_obj.get (),
"inferior_thread",
thread) < 0)