Skip to content

Commit

Permalink
pythonGH-104510: Fix refleaks in _io base types (python#104516)
Browse files Browse the repository at this point in the history
  • Loading branch information
kumaraditya303 authored May 16, 2023
1 parent 0bb61dd commit 442a3e6
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 26 deletions.
11 changes: 2 additions & 9 deletions Modules/_io/bufferedio.c
Original file line number Diff line number Diff line change
Expand Up @@ -2424,13 +2424,6 @@ _io_BufferedRandom___init___impl(buffered *self, PyObject *raw,
#include "clinic/bufferedio.c.h"
#undef clinic_state

static int
bufferediobase_traverse(PyObject *self, visitproc visit, void *arg)
{
Py_VISIT(Py_TYPE(self));
return 0;
}

static PyMethodDef bufferediobase_methods[] = {
_IO__BUFFEREDIOBASE_DETACH_METHODDEF
_IO__BUFFEREDIOBASE_READ_METHODDEF
Expand All @@ -2444,13 +2437,13 @@ static PyMethodDef bufferediobase_methods[] = {
static PyType_Slot bufferediobase_slots[] = {
{Py_tp_doc, (void *)bufferediobase_doc},
{Py_tp_methods, bufferediobase_methods},
{Py_tp_traverse, bufferediobase_traverse},
{0, NULL},
};

/* Do not set Py_TPFLAGS_HAVE_GC so that tp_traverse and tp_clear are inherited */
PyType_Spec bufferediobase_spec = {
.name = "_io._BufferedIOBase",
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
Py_TPFLAGS_IMMUTABLETYPE),
.slots = bufferediobase_slots,
};
Expand Down
11 changes: 2 additions & 9 deletions Modules/_io/iobase.c
Original file line number Diff line number Diff line change
Expand Up @@ -1036,13 +1036,6 @@ rawiobase_write(PyObject *self, PyObject *args)
return NULL;
}

static int
rawiobase_traverse(PyObject *self, visitproc visit, void *arg)
{
Py_VISIT(Py_TYPE(self));
return 0;
}

static PyMethodDef rawiobase_methods[] = {
_IO__RAWIOBASE_READ_METHODDEF
_IO__RAWIOBASE_READALL_METHODDEF
Expand All @@ -1054,13 +1047,13 @@ static PyMethodDef rawiobase_methods[] = {
static PyType_Slot rawiobase_slots[] = {
{Py_tp_doc, (void *)rawiobase_doc},
{Py_tp_methods, rawiobase_methods},
{Py_tp_traverse, rawiobase_traverse},
{0, NULL},
};

/* Do not set Py_TPFLAGS_HAVE_GC so that tp_traverse and tp_clear are inherited */
PyType_Spec rawiobase_spec = {
.name = "_io._RawIOBase",
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
Py_TPFLAGS_IMMUTABLETYPE),
.slots = rawiobase_slots,
};
10 changes: 2 additions & 8 deletions Modules/_io/textio.c
Original file line number Diff line number Diff line change
Expand Up @@ -167,12 +167,6 @@ textiobase_errors_get(PyObject *self, void *context)
Py_RETURN_NONE;
}

static int
textiobase_traverse(PyObject *self, visitproc visit, void *arg)
{
Py_VISIT(Py_TYPE(self));
return 0;
}

static PyMethodDef textiobase_methods[] = {
_IO__TEXTIOBASE_DETACH_METHODDEF
Expand All @@ -193,13 +187,13 @@ static PyType_Slot textiobase_slots[] = {
{Py_tp_doc, (void *)textiobase_doc},
{Py_tp_methods, textiobase_methods},
{Py_tp_getset, textiobase_getset},
{Py_tp_traverse, textiobase_traverse},
{0, NULL},
};

/* Do not set Py_TPFLAGS_HAVE_GC so that tp_traverse and tp_clear are inherited */
PyType_Spec textiobase_spec = {
.name = "_io._TextIOBase",
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
Py_TPFLAGS_IMMUTABLETYPE),
.slots = textiobase_slots,
};
Expand Down

0 comments on commit 442a3e6

Please sign in to comment.