+2019-01-02 Tom Tromey <tom@tromey.com>
+
+ * python/python-internal.h (inferior_to_inferior_object): Change
+ return type.
+ * python/py-exitedevent.c (create_exited_event_object): Update.
+ * python/py-inferior.c (inferior_to_inferior_object): Return
+ gdbpy_ref.
+ (python_new_inferior, python_inferior_deleted)
+ (thread_to_thread_object, delete_thread_object)
+ (build_inferior_list, gdbpy_selected_inferior): Update.
+ * python/py-infthread.c (create_thread_object): Update. Also fail
+ if inferior_to_inferior_object fails.
+
2019-01-02 Simon Marchi <simon.marchi@ericsson.com>
* inferior.h (class inferior) <displaced_step_state>: New field.
return it and increment the reference count, otherwise, create it.
Return NULL on failure. */
-inferior_object *
+gdbpy_ref<inferior_object>
inferior_to_inferior_object (struct inferior *inferior)
{
inferior_object *inf_obj;
{
inf_obj = PyObject_New (inferior_object, &inferior_object_type);
if (!inf_obj)
- return NULL;
+ return NULL;
inf_obj->inferior = inferior;
inf_obj->threads = NULL;
/* PyObject_New initializes the new object with a refcount of 1. This
counts for the reference we are keeping in the inferior data. */
set_inferior_data (inferior, infpy_inf_data_key, inf_obj);
-
}
/* We are returning a new reference. */
- Py_INCREF ((PyObject *)inf_obj);
-
- return inf_obj;
+ gdb_assert (inf_obj != nullptr);
+ return gdbpy_ref<inferior_object>::new_reference (inf_obj);
}
/* Called when a new inferior is created. Notifies any Python event
if (evregpy_no_listeners_p (gdb_py_events.new_inferior))
return;
- gdbpy_ref<inferior_object> inf_obj (inferior_to_inferior_object (inf));
+ gdbpy_ref<inferior_object> inf_obj = inferior_to_inferior_object (inf);
if (inf_obj == NULL)
{
gdbpy_print_stack ();
if (evregpy_no_listeners_p (gdb_py_events.inferior_deleted))
return;
- gdbpy_ref<inferior_object> inf_obj (inferior_to_inferior_object (inf));
+ gdbpy_ref<inferior_object> inf_obj = inferior_to_inferior_object (inf);
if (inf_obj == NULL)
{
gdbpy_print_stack ();
gdbpy_ref<>
thread_to_thread_object (thread_info *thr)
{
- gdbpy_ref<inferior_object> inf_obj (inferior_to_inferior_object (thr->inf));
+ gdbpy_ref<inferior_object> inf_obj = inferior_to_inferior_object (thr->inf);
if (inf_obj == NULL)
return NULL;
gdbpy_enter enter_py (python_gdbarch, python_language);
- gdbpy_ref<inferior_object> inf_obj
- ((inferior_object *) inferior_to_inferior_object (tp->inf));
+ gdbpy_ref<inferior_object> inf_obj = inferior_to_inferior_object (tp->inf);
if (inf_obj == NULL)
return;
build_inferior_list (struct inferior *inf, void *arg)
{
PyObject *list = (PyObject *) arg;
- gdbpy_ref<inferior_object> inferior (inferior_to_inferior_object (inf));
+ gdbpy_ref<inferior_object> inferior = inferior_to_inferior_object (inf);
if (inferior == NULL)
return 0;
PyObject *
gdbpy_selected_inferior (PyObject *self, PyObject *args)
{
- return (PyObject *) inferior_to_inferior_object (current_inferior ());
+ return ((PyObject *)
+ inferior_to_inferior_object (current_inferior ()).release ());
}
int