X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fpython%2Fpy-threadevent.c;h=3be86b71daa3327e8920926928f119732eb5da64;hb=5b6d1e4fa4fc6827c7b3f0e99ff120dfa14d65d2;hp=6932cd387e54d9ba310cf6a572eafcc9845685f0;hpb=32d0add0a654c1204ab71dc8a55d9374538c4b33;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/python/py-threadevent.c b/gdb/python/py-threadevent.c index 6932cd387e..3be86b71da 100644 --- a/gdb/python/py-threadevent.c +++ b/gdb/python/py-threadevent.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2009-2015 Free Software Foundation, Inc. +/* Copyright (C) 2009-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -18,64 +18,39 @@ #include "defs.h" #include "py-event.h" #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) +gdbpy_ref<> +py_get_event_thread (ptid_t ptid) { - PyObject *thread = NULL; - if (non_stop) - thread = (PyObject *) find_thread_object (inferior_ptid); - else - thread = Py_None; - - if (!thread) { + thread_info *thread + = find_thread_ptid (current_inferior ()->process_target (), + ptid); + if (thread != nullptr) + return thread_to_thread_object (thread); PyErr_SetString (PyExc_RuntimeError, "Could not find event thread"); return NULL; } - - return thread; + return gdbpy_ref<>::new_reference (Py_None); } -PyObject * -create_thread_event_object (PyTypeObject *py_type) +gdbpy_ref<> +create_thread_event_object (PyTypeObject *py_type, PyObject *thread) { - PyObject *thread = NULL; - PyObject *thread_event_obj = NULL; + gdb_assert (thread != NULL); - thread_event_obj = create_event_object (py_type); - if (!thread_event_obj) - goto fail; + gdbpy_ref<> thread_event_obj = create_event_object (py_type); + if (thread_event_obj == NULL) + return NULL; - thread = get_event_thread (); - if (!thread) - goto fail; - - if (evpy_add_attribute (thread_event_obj, + if (evpy_add_attribute (thread_event_obj.get (), "inferior_thread", thread) < 0) - goto fail; + return NULL; return thread_event_obj; - - fail: - Py_XDECREF (thread_event_obj); - return NULL; } - -GDBPY_NEW_EVENT_TYPE (thread, - "gdb.ThreadEvent", - "ThreadEvent", - "GDB thread event object", - event_object_type, - /*no qual*/);