Remove more uses of explicit reference counting in Python
This changes some more place in the Python code to use gdbpy_ref rather than explicit reference counting. While doing this I found a latent bug in typy_fields_items -- it was not checking for errors in one spot. I also changed valpy_dealloc to use Py_XDECREF rather than an explicit "if". gdb/ChangeLog 2019-01-03 Tom Tromey <tom@tromey.com> * python/py-value.c (valpy_dealloc): Use Py_XDECREF. * python/py-type.c (typy_fields_items): Use gdbpy_ref. * python/py-progspace.c (pspy_set_printers): Use gdbpy_ref. (pspy_set_frame_filters, pspy_set_frame_unwinders) (pspy_set_type_printers): Likewise. * python/py-function.c (fnpy_init): Use gdbpy_ref. * python/py-cmd.c (cmdpy_init): Use gdbpy_ref. * python/py-objfile.c (objfpy_set_printers): Use gdbpy_ref. (objfpy_set_frame_filters, objfpy_set_frame_unwinders) (objfpy_set_type_printers): Likewise.
This commit is contained in:
parent
5c329e6ab4
commit
2a3c71d68d
7 changed files with 39 additions and 57 deletions
|
@ -109,7 +109,8 @@ fnpy_init (PyObject *self, PyObject *args, PyObject *kwds)
|
|||
|
||||
if (! PyArg_ParseTuple (args, "s", &name))
|
||||
return -1;
|
||||
Py_INCREF (self);
|
||||
|
||||
gdbpy_ref<> self_ref = gdbpy_ref<>::new_reference (self);
|
||||
|
||||
if (PyObject_HasAttrString (self, "__doc__"))
|
||||
{
|
||||
|
@ -120,17 +121,15 @@ fnpy_init (PyObject *self, PyObject *args, PyObject *kwds)
|
|||
{
|
||||
docstring = python_string_to_host_string (ds_obj.get ());
|
||||
if (docstring == NULL)
|
||||
{
|
||||
Py_DECREF (self);
|
||||
return -1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (! docstring)
|
||||
docstring.reset (xstrdup (_("This function is not documented.")));
|
||||
|
||||
add_internal_function (name, docstring.release (), fnpy_call, self);
|
||||
add_internal_function (name, docstring.release (), fnpy_call,
|
||||
self_ref.release ());
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue