This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 2017-04-09 02:06, Kevin Buettner wrote:
gdb/ChangeLog: * python/py-infthread.c (gdbpy_thread_from_thread_handle): New function. * python/python-internal.h (thread_object_type): Declare. (gdbpy_thread_from_thread_handle): Declare. * python/python.c (thread_from_thread_handle): Register. ---gdb/python/py-infthread.c | 41 +++++++++++++++++++++++++++++++++++++++++gdb/python/python-internal.h | 3 +++ gdb/python/python.c | 4 ++++ 3 files changed, 48 insertions(+) diff --git a/gdb/python/py-infthread.c b/gdb/python/py-infthread.c index 5482bf9..5739984 100644 --- a/gdb/python/py-infthread.c +++ b/gdb/python/py-infthread.c@@ -294,6 +294,47 @@ gdbpy_selected_thread (PyObject *self, PyObject *args)Py_RETURN_NONE; } +/* Implementation of gdb.thread_from_thread_handle (handle) + -> gdb.InferiorThread. */ + +PyObject *+gdbpy_thread_from_thread_handle (PyObject *self, PyObject *args, PyObject *kw)+{ + PyObject *handle_obj, *result; + static char *keywords[] = { "thread_handle", NULL }; ++ if (! PyArg_ParseTupleAndKeywords (args, kw, "O", keywords, &handle_obj))+ return NULL;
To adapt the patch to the current GDB master, you'll need to make keyword a const char * [], and use gdb_PyArg_ParseTupleAndKeywords.
+ + result = Py_None; + + if (gdbpy_is_value_object (handle_obj)) + { + TRY + { + struct thread_info *thread_info; + struct value *val = value_object_to_value (handle_obj); + + thread_info = find_thread_by_handle (val); + if (thread_info != NULL) + { + result = (PyObject *) find_thread_object (thread_info->ptid); + if (result)
if (result != NULL)
+ Py_INCREF (result); + } + } + CATCH (except, RETURN_MASK_ALL) + { + if (except.reason < 0) + gdbpy_convert_exception (except); + return NULL;
Should you use GDB_PY_HANDLE_EXCEPTION? The behavior is a little bit different than your code, in that it will only return if an exception was set. The Python doc says: "If the return value is NULL, an exception shall have been set.". Here, it's possible that we return NULL without having set an exception.
Thanks, Simon
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |