mirror of
https://github.com/psycopg/psycopg2.git
synced 2024-11-29 12:23:42 +03:00
Diagnostics is more GC friendly
This commit is contained in:
parent
678f0dc949
commit
1cf9825035
|
@ -120,46 +120,43 @@ static struct PyGetSetDef diagnosticsObject_getsets[] = {
|
||||||
|
|
||||||
/* initialization and finalization methods */
|
/* initialization and finalization methods */
|
||||||
|
|
||||||
static int
|
|
||||||
diagnostics_setup(diagnosticsObject *self, PyObject *err)
|
|
||||||
{
|
|
||||||
self->err = err;
|
|
||||||
Py_INCREF(err);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
diagnostics_dealloc(PyObject* obj)
|
|
||||||
{
|
|
||||||
diagnosticsObject *self = (diagnosticsObject *)obj;
|
|
||||||
|
|
||||||
Py_XDECREF(self->err);
|
|
||||||
|
|
||||||
Py_TYPE(obj)->tp_free(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
diagnostics_init(PyObject *obj, PyObject *args, PyObject *kwds)
|
|
||||||
{
|
|
||||||
PyObject *err = NULL;
|
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "O", &err))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
return diagnostics_setup((diagnosticsObject *)obj, err);
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
diagnostics_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
diagnostics_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
{
|
{
|
||||||
return type->tp_alloc(type, 0);
|
return type->tp_alloc(type, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
diagnostics_init(diagnosticsObject *self, PyObject *args, PyObject *kwds)
|
||||||
|
{
|
||||||
|
PyObject *err = NULL;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, "O", &err))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
Py_INCREF(err);
|
||||||
|
self->err = err;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
diagnostics_traverse(diagnosticsObject *self, visitproc visit, void *arg)
|
||||||
|
{
|
||||||
|
Py_VISIT(self->err);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
diagnostics_dealloc(diagnosticsObject* self)
|
||||||
|
{
|
||||||
|
Py_CLEAR(self->err);
|
||||||
|
Py_TYPE(self)->tp_free((PyObject *)self);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
diagnostics_del(PyObject* self)
|
diagnostics_del(PyObject* self)
|
||||||
{
|
{
|
||||||
PyObject_Del(self);
|
PyObject_GC_Del(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -184,7 +181,7 @@ PyTypeObject diagnosticsType = {
|
||||||
"psycopg2._psycopg.Diagnostics",
|
"psycopg2._psycopg.Diagnostics",
|
||||||
sizeof(diagnosticsObject),
|
sizeof(diagnosticsObject),
|
||||||
0,
|
0,
|
||||||
diagnostics_dealloc, /*tp_dealloc*/
|
(destructor)diagnostics_dealloc, /*tp_dealloc*/
|
||||||
0, /*tp_print*/
|
0, /*tp_print*/
|
||||||
0, /*tp_getattr*/
|
0, /*tp_getattr*/
|
||||||
0, /*tp_setattr*/
|
0, /*tp_setattr*/
|
||||||
|
@ -201,10 +198,10 @@ PyTypeObject diagnosticsType = {
|
||||||
0, /*tp_setattro*/
|
0, /*tp_setattro*/
|
||||||
0, /*tp_as_buffer*/
|
0, /*tp_as_buffer*/
|
||||||
|
|
||||||
Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /*tp_flags*/
|
Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
|
||||||
diagnosticsType_doc, /*tp_doc*/
|
diagnosticsType_doc, /*tp_doc*/
|
||||||
|
|
||||||
0, /*tp_traverse*/
|
(traverseproc)diagnostics_traverse, /*tp_traverse*/
|
||||||
0, /*tp_clear*/
|
0, /*tp_clear*/
|
||||||
|
|
||||||
0, /*tp_richcompare*/
|
0, /*tp_richcompare*/
|
||||||
|
@ -225,7 +222,7 @@ PyTypeObject diagnosticsType = {
|
||||||
0, /*tp_descr_set*/
|
0, /*tp_descr_set*/
|
||||||
0, /*tp_dictoffset*/
|
0, /*tp_dictoffset*/
|
||||||
|
|
||||||
diagnostics_init, /*tp_init*/
|
(initproc)diagnostics_init, /*tp_init*/
|
||||||
0, /*tp_alloc will be set to PyType_GenericAlloc in module init*/
|
0, /*tp_alloc will be set to PyType_GenericAlloc in module init*/
|
||||||
diagnostics_new, /*tp_new*/
|
diagnostics_new, /*tp_new*/
|
||||||
(freefunc)diagnostics_del, /*tp_free Low-level free-memory routine */
|
(freefunc)diagnostics_del, /*tp_free Low-level free-memory routine */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user