From c17a9e46882cb057d7e1d150ac9974425dc55e03 Mon Sep 17 00:00:00 2001 From: Hui Zhu Date: Sat, 5 Feb 2011 05:27:23 +0000 Subject: Add the file that prev commit forget. --- gdb/python/py-threadevent.c | 78 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 gdb/python/py-threadevent.c (limited to 'gdb/python/py-threadevent.c') diff --git a/gdb/python/py-threadevent.c b/gdb/python/py-threadevent.c new file mode 100644 index 0000000..7963412 --- /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 . */ + +#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*/); -- cgit v1.1