Small event ownership clean up in Python layer
It seems cleaner to me for functions like create_thread_event_object, which pass object ownership to their callers, to directly return a gdb_ref<>. This way the ownership transfer is part of the API. This patch makes this change. ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * python/py-threadevent.c (create_thread_event_object): Return gdbpy_ref. * python/py-stopevent.h (create_stop_event_object) (create_breakpoint_event_object, create_signal_event_object): Update. * python/py-stopevent.c (create_stop_event_object): Return gdbpy_ref. (emit_stop_event): Update. * python/py-signalevent.c (create_signal_event_object): Return gdbpy_ref. * python/py-infevents.c (create_inferior_call_event_object): Update. * python/py-event.h (create_event_object) (create_thread_event_object): Update. * python/py-event.c (create_event_object): Return gdbpy_ref. * python/py-continueevent.c: Return gdbpy_ref. * python/py-bpevent.c (create_breakpoint_event_object): Return gdbpy_ref.
This commit is contained in:
parent
7c96f8c1da
commit
35c61a1dd5
10 changed files with 44 additions and 23 deletions
|
@ -1,3 +1,24 @@
|
||||||
|
2017-09-11 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* python/py-threadevent.c (create_thread_event_object): Return
|
||||||
|
gdbpy_ref.
|
||||||
|
* python/py-stopevent.h (create_stop_event_object)
|
||||||
|
(create_breakpoint_event_object, create_signal_event_object):
|
||||||
|
Update.
|
||||||
|
* python/py-stopevent.c (create_stop_event_object): Return
|
||||||
|
gdbpy_ref.
|
||||||
|
(emit_stop_event): Update.
|
||||||
|
* python/py-signalevent.c (create_signal_event_object): Return
|
||||||
|
gdbpy_ref.
|
||||||
|
* python/py-infevents.c (create_inferior_call_event_object):
|
||||||
|
Update.
|
||||||
|
* python/py-event.h (create_event_object)
|
||||||
|
(create_thread_event_object): Update.
|
||||||
|
* python/py-event.c (create_event_object): Return gdbpy_ref.
|
||||||
|
* python/py-continueevent.c: Return gdbpy_ref.
|
||||||
|
* python/py-bpevent.c (create_breakpoint_event_object): Return
|
||||||
|
gdbpy_ref.
|
||||||
|
|
||||||
2017-09-11 Tom Tromey <tom@tromey.com>
|
2017-09-11 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
PR python/15622:
|
PR python/15622:
|
||||||
|
|
|
@ -27,7 +27,7 @@ extern PyTypeObject breakpoint_event_object_type
|
||||||
/* Create and initialize a BreakpointEvent object. This acquires new
|
/* Create and initialize a BreakpointEvent object. This acquires new
|
||||||
references to BREAKPOINT_LIST and FIRST_BP. */
|
references to BREAKPOINT_LIST and FIRST_BP. */
|
||||||
|
|
||||||
PyObject *
|
gdbpy_ref<>
|
||||||
create_breakpoint_event_object (PyObject *breakpoint_list, PyObject *first_bp)
|
create_breakpoint_event_object (PyObject *breakpoint_list, PyObject *first_bp)
|
||||||
{
|
{
|
||||||
gdbpy_ref<> breakpoint_event_obj
|
gdbpy_ref<> breakpoint_event_obj
|
||||||
|
@ -45,7 +45,7 @@ create_breakpoint_event_object (PyObject *breakpoint_list, PyObject *first_bp)
|
||||||
breakpoint_list) < 0)
|
breakpoint_list) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return breakpoint_event_obj.release ();
|
return breakpoint_event_obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
GDBPY_NEW_EVENT_TYPE (breakpoint,
|
GDBPY_NEW_EVENT_TYPE (breakpoint,
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
extern PyTypeObject continue_event_object_type
|
extern PyTypeObject continue_event_object_type
|
||||||
CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
|
CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
|
||||||
|
|
||||||
static PyObject *
|
static gdbpy_ref<>
|
||||||
create_continue_event_object (void)
|
create_continue_event_object (void)
|
||||||
{
|
{
|
||||||
return create_thread_event_object (&continue_event_object_type);
|
return create_thread_event_object (&continue_event_object_type);
|
||||||
|
|
|
@ -27,7 +27,7 @@ evpy_dealloc (PyObject *self)
|
||||||
Py_TYPE (self)->tp_free (self);
|
Py_TYPE (self)->tp_free (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
gdbpy_ref<>
|
||||||
create_event_object (PyTypeObject *py_type)
|
create_event_object (PyTypeObject *py_type)
|
||||||
{
|
{
|
||||||
gdbpy_ref<event_object> event_obj (PyObject_New (event_object, py_type));
|
gdbpy_ref<event_object> event_obj (PyObject_New (event_object, py_type));
|
||||||
|
@ -38,7 +38,7 @@ create_event_object (PyTypeObject *py_type)
|
||||||
if (!event_obj->dict)
|
if (!event_obj->dict)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return (PyObject*) event_obj.release ();
|
return gdbpy_ref<> ((PyObject *) event_obj.release ());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add the attribute ATTR to the event object EVENT. In
|
/* Add the attribute ATTR to the event object EVENT. In
|
||||||
|
|
|
@ -124,8 +124,8 @@ extern int emit_memory_changed_event (CORE_ADDR addr, ssize_t len);
|
||||||
extern int evpy_emit_event (PyObject *event,
|
extern int evpy_emit_event (PyObject *event,
|
||||||
eventregistry_object *registry);
|
eventregistry_object *registry);
|
||||||
|
|
||||||
extern PyObject *create_event_object (PyTypeObject *py_type);
|
extern gdbpy_ref<> create_event_object (PyTypeObject *py_type);
|
||||||
extern PyObject *create_thread_event_object (PyTypeObject *py_type,
|
extern gdbpy_ref<> create_thread_event_object (PyTypeObject *py_type,
|
||||||
PyObject *thread = nullptr);
|
PyObject *thread = nullptr);
|
||||||
extern int emit_new_objfile_event (struct objfile *objfile);
|
extern int emit_new_objfile_event (struct objfile *objfile);
|
||||||
extern int emit_clear_objfiles_event (void);
|
extern int emit_clear_objfiles_event (void);
|
||||||
|
|
|
@ -43,10 +43,10 @@ create_inferior_call_event_object (inferior_call_kind flag, ptid_t ptid,
|
||||||
switch (flag)
|
switch (flag)
|
||||||
{
|
{
|
||||||
case INFERIOR_CALL_PRE:
|
case INFERIOR_CALL_PRE:
|
||||||
event.reset (create_event_object (&inferior_call_pre_event_object_type));
|
event = create_event_object (&inferior_call_pre_event_object_type);
|
||||||
break;
|
break;
|
||||||
case INFERIOR_CALL_POST:
|
case INFERIOR_CALL_POST:
|
||||||
event.reset (create_event_object (&inferior_call_post_event_object_type));
|
event = create_event_object (&inferior_call_post_event_object_type);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
gdb_assert_not_reached ("invalid inferior_call_kind");
|
gdb_assert_not_reached ("invalid inferior_call_kind");
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
extern PyTypeObject signal_event_object_type
|
extern PyTypeObject signal_event_object_type
|
||||||
CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
|
CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("event_object");
|
||||||
|
|
||||||
PyObject *
|
gdbpy_ref<>
|
||||||
create_signal_event_object (enum gdb_signal stop_signal)
|
create_signal_event_object (enum gdb_signal stop_signal)
|
||||||
{
|
{
|
||||||
const char *signal_name;
|
const char *signal_name;
|
||||||
|
@ -43,7 +43,7 @@ create_signal_event_object (enum gdb_signal stop_signal)
|
||||||
signal_name_obj.get ()) < 0)
|
signal_name_obj.get ()) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return signal_event_obj.release ();
|
return signal_event_obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
GDBPY_NEW_EVENT_TYPE (signal,
|
GDBPY_NEW_EVENT_TYPE (signal,
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
#include "py-stopevent.h"
|
#include "py-stopevent.h"
|
||||||
|
|
||||||
PyObject *
|
gdbpy_ref<>
|
||||||
create_stop_event_object (PyTypeObject *py_type)
|
create_stop_event_object (PyTypeObject *py_type)
|
||||||
{
|
{
|
||||||
return create_thread_event_object (py_type);
|
return create_thread_event_object (py_type);
|
||||||
|
@ -70,8 +70,8 @@ emit_stop_event (struct bpstats *bs, enum gdb_signal stop_signal)
|
||||||
|
|
||||||
if (list != NULL)
|
if (list != NULL)
|
||||||
{
|
{
|
||||||
stop_event_obj.reset (create_breakpoint_event_object (list.get (),
|
stop_event_obj = create_breakpoint_event_object (list.get (),
|
||||||
first_bp));
|
first_bp);
|
||||||
if (stop_event_obj == NULL)
|
if (stop_event_obj == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,7 @@ emit_stop_event (struct bpstats *bs, enum gdb_signal stop_signal)
|
||||||
if (stop_signal != GDB_SIGNAL_0
|
if (stop_signal != GDB_SIGNAL_0
|
||||||
&& stop_signal != GDB_SIGNAL_TRAP)
|
&& stop_signal != GDB_SIGNAL_TRAP)
|
||||||
{
|
{
|
||||||
stop_event_obj.reset (create_signal_event_object (stop_signal));
|
stop_event_obj = create_signal_event_object (stop_signal);
|
||||||
if (stop_event_obj == NULL)
|
if (stop_event_obj == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,7 @@ emit_stop_event (struct bpstats *bs, enum gdb_signal stop_signal)
|
||||||
be known and this should eventually be unused. */
|
be known and this should eventually be unused. */
|
||||||
if (stop_event_obj == NULL)
|
if (stop_event_obj == NULL)
|
||||||
{
|
{
|
||||||
stop_event_obj.reset (create_stop_event_object (&stop_event_object_type));
|
stop_event_obj = create_stop_event_object (&stop_event_object_type);
|
||||||
if (stop_event_obj == NULL)
|
if (stop_event_obj == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,15 +22,15 @@
|
||||||
|
|
||||||
#include "py-event.h"
|
#include "py-event.h"
|
||||||
|
|
||||||
extern PyObject *create_stop_event_object (PyTypeObject *py_type);
|
extern gdbpy_ref<> create_stop_event_object (PyTypeObject *py_type);
|
||||||
extern void stop_evpy_dealloc (PyObject *self);
|
extern void stop_evpy_dealloc (PyObject *self);
|
||||||
|
|
||||||
extern int emit_stop_event (struct bpstats *bs,
|
extern int emit_stop_event (struct bpstats *bs,
|
||||||
enum gdb_signal stop_signal);
|
enum gdb_signal stop_signal);
|
||||||
|
|
||||||
extern PyObject *create_breakpoint_event_object (PyObject *breakpoint_list,
|
extern gdbpy_ref<> create_breakpoint_event_object (PyObject *breakpoint_list,
|
||||||
PyObject *first_bp);
|
PyObject *first_bp);
|
||||||
|
|
||||||
extern PyObject *create_signal_event_object (enum gdb_signal stop_signal);
|
extern gdbpy_ref<> create_signal_event_object (enum gdb_signal stop_signal);
|
||||||
|
|
||||||
#endif /* GDB_PY_STOPEVENT_H */
|
#endif /* GDB_PY_STOPEVENT_H */
|
||||||
|
|
|
@ -47,7 +47,7 @@ get_event_thread (void)
|
||||||
return thread;
|
return thread;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
gdbpy_ref<>
|
||||||
create_thread_event_object (PyTypeObject *py_type, PyObject *thread)
|
create_thread_event_object (PyTypeObject *py_type, PyObject *thread)
|
||||||
{
|
{
|
||||||
gdbpy_ref<> thread_event_obj (create_event_object (py_type));
|
gdbpy_ref<> thread_event_obj (create_event_object (py_type));
|
||||||
|
@ -66,7 +66,7 @@ create_thread_event_object (PyTypeObject *py_type, PyObject *thread)
|
||||||
thread) < 0)
|
thread) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return thread_event_obj.release ();
|
return thread_event_obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
GDBPY_NEW_EVENT_TYPE (thread,
|
GDBPY_NEW_EVENT_TYPE (thread,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue