mirror of
https://github.com/psycopg/psycopg2.git
synced 2024-11-10 19:16:34 +03:00
Implement traversal for Diagnostics object
Triyng to fix a reported memory leak with diags, but implementing traversing doesn't help. Quite the opposite in the example provided in bug #557, the leak is present even with the `del diag`. The leak appears with Python 3.5, not with Python 2.7.
This commit is contained in:
parent
165449c724
commit
9f6bab692d
|
@ -132,10 +132,23 @@ diagnostics_init(diagnosticsObject *self, PyObject *args, PyObject *kwds)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
diagnostics_traverse(diagnosticsObject *self, visitproc visit, void *arg)
|
||||||
|
{
|
||||||
|
Py_VISIT(self->err);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
diagnostics_clear(diagnosticsObject *self)
|
||||||
|
{
|
||||||
|
Py_CLEAR(self->err);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
diagnostics_dealloc(diagnosticsObject* self)
|
diagnostics_dealloc(diagnosticsObject* self)
|
||||||
{
|
{
|
||||||
Py_CLEAR(self->err);
|
|
||||||
Py_TYPE(self)->tp_free((PyObject *)self);
|
Py_TYPE(self)->tp_free((PyObject *)self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,10 +188,10 @@ PyTypeObject diagnosticsType = {
|
||||||
0, /*tp_getattro*/
|
0, /*tp_getattro*/
|
||||||
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*/
|
(inquiry)diagnostics_clear, /*tp_clear*/
|
||||||
0, /*tp_richcompare*/
|
0, /*tp_richcompare*/
|
||||||
0, /*tp_weaklistoffset*/
|
0, /*tp_weaklistoffset*/
|
||||||
0, /*tp_iter*/
|
0, /*tp_iter*/
|
||||||
|
|
Loading…
Reference in New Issue
Block a user