Add python method InferiorThread.handle
authorKevin Buettner <kevinb@redhat.com>
Wed, 27 Feb 2019 21:59:02 +0000 (14:59 -0700)
committerKevin Buettner <kevinb@redhat.com>
Tue, 9 Apr 2019 03:12:45 +0000 (20:12 -0700)
gdb/ChangeLog:

* python/py-infthread.c (thpy_thread_handle): New function.
(thread_object_methods): Register thpy_thread_handle.

gdb/ChangeLog
gdb/python/py-infthread.c

index ea89249..7912f7d 100644 (file)
@@ -1,5 +1,10 @@
 2019-04-08  Kevin Buettner  <kevinb@redhat.com>
 
+       * python/py-infthread.c (thpy_thread_handle): New function.
+       (thread_object_methods): Register thpy_thread_handle.
+
+2019-04-08  Kevin Buettner  <kevinb@redhat.com>
+
        * gdbthread.h (thread_to_thread_handle): Declare.
        * thread.c (gdbtypes.h): Include.
        (thread_to_thread_handle): New function.
index 33ed8d5..8c556f9 100644 (file)
@@ -256,6 +256,36 @@ thpy_is_valid (PyObject *self, PyObject *args)
   Py_RETURN_TRUE;
 }
 
+/* Implementation of gdb.InferiorThread.handle (self) -> handle. */
+
+static PyObject *
+thpy_thread_handle (PyObject *self, PyObject *args)
+{
+  thread_object *thread_obj = (thread_object *) self;
+  THPY_REQUIRE_VALID (thread_obj);
+
+  gdb::byte_vector hv;
+  
+  try
+    {
+      hv = target_thread_info_to_thread_handle (thread_obj->thread);
+    }
+  catch (const gdb_exception &except)
+    {
+      GDB_PY_HANDLE_EXCEPTION (except);
+    }
+
+  if (hv.size () == 0)
+    {
+      PyErr_SetString (PyExc_RuntimeError, _("Thread handle not found."));
+      return NULL;
+    }
+
+  PyObject *object = PyBytes_FromStringAndSize ((const char *) hv.data (),
+                                               hv.size());
+  return object;
+}
+
 /* Return a reference to a new Python object representing a ptid_t.
    The object is a tuple containing (pid, lwp, tid). */
 PyObject *
@@ -335,6 +365,9 @@ Return whether the thread is running." },
   { "is_exited", thpy_is_exited, METH_NOARGS,
     "is_exited () -> Boolean\n\
 Return whether the thread is exited." },
+  { "handle", thpy_thread_handle, METH_NOARGS,
+    "handle  () -> handle\n\
+Return thread library specific handle for thread." },
 
   { NULL }
 };