diff options
Diffstat (limited to 'gdb/python/py-threadevent.c')
-rw-r--r-- | gdb/python/py-threadevent.c | 36 |
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) |