diff options
Diffstat (limited to 'gdb/python/py-threadevent.c')
-rw-r--r-- | gdb/python/py-threadevent.c | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/gdb/python/py-threadevent.c b/gdb/python/py-threadevent.c new file mode 100644 index 00000000000..7963412e085 --- /dev/null +++ b/gdb/python/py-threadevent.c @@ -0,0 +1,78 @@ +/* Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "py-event.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. */ + +static PyObject * +get_event_thread (void) +{ + PyObject *thread = NULL; + + if (non_stop) + thread = (PyObject *) find_thread_object (inferior_ptid); + else + thread = Py_None; + + if (!thread) + { + PyErr_SetString (PyExc_RuntimeError, "Could not find event thread"); + return NULL; + } + + Py_INCREF (thread); + + return thread; +} + +PyObject * +create_thread_event_object (PyTypeObject *py_type) +{ + PyObject *thread = NULL; + PyObject *thread_event_obj = NULL; + + thread_event_obj = create_event_object (py_type); + if (!thread_event_obj) + goto fail; + + thread = get_event_thread (); + if (!thread) + goto fail; + + if (evpy_add_attribute (thread_event_obj, + "inferior_thread", + thread) < 0) + goto fail; + + 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*/); |