/* Python interface to inferior continue events.
- Copyright (C) 2009-2013 Free Software Foundation, Inc.
+ Copyright (C) 2009-2020 Free Software Foundation, Inc.
This file is part of GDB.
#include "defs.h"
#include "py-event.h"
+#include "gdbthread.h"
-static PyTypeObject continue_event_object_type
- CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
+/* Create a gdb.ContinueEvent event. gdb.ContinueEvent is-a
+ gdb.ThreadEvent, and thread events can either be thread specific or
+ process wide. If gdb is running in non-stop mode then the event is
+ thread specific (in which case the PTID thread is included in the
+ event), otherwise it is process wide (in which case PTID is
+ ignored). In either case a new reference is returned. */
-static PyObject *
-create_continue_event_object (void)
+static gdbpy_ref<>
+create_continue_event_object (ptid_t ptid)
{
- return create_thread_event_object (&continue_event_object_type);
+ gdbpy_ref<> py_thr = py_get_event_thread (ptid);
+
+ if (py_thr == nullptr)
+ return nullptr;
+
+ return create_thread_event_object (&continue_event_object_type,
+ py_thr.get ());
}
/* Callback function which notifies observers when a continue event occurs.
int
emit_continue_event (ptid_t ptid)
{
- PyObject *event;
-
if (evregpy_no_listeners_p (gdb_py_events.cont))
return 0;
- event = create_continue_event_object ();
- if (event)
- return evpy_emit_event (event, gdb_py_events.cont);
+ gdbpy_ref<> event = create_continue_event_object (ptid);
+ if (event != NULL)
+ return evpy_emit_event (event.get (), gdb_py_events.cont);
return -1;
}
-
-GDBPY_NEW_EVENT_TYPE (continue,
- "gdb.ContinueEvent",
- "ContinueEvent",
- "GDB continue event object",
- thread_event_object_type,
- static);