diff -r dc0811953034 Modules/_io/bytesio.c --- a/Modules/_io/bytesio.c Fri Mar 25 12:50:54 2016 +0100 +++ b/Modules/_io/bytesio.c Fri Mar 25 14:31:42 2016 +0100 @@ -909,6 +909,9 @@ bytesio_setstate(bytesio *self, PyObject static void bytesio_dealloc(bytesio *self) { + if (_PyIOBase_finalize((PyObject *) self) < 0) + return; + _PyObject_GC_UNTRACK(self); if (self->exports > 0) { PyErr_SetString(PyExc_SystemError, @@ -1062,8 +1065,8 @@ PyTypeObject PyBytesIO_Type = { 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | - Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC + | Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ _io_BytesIO___init____doc__, /*tp_doc*/ (traverseproc)bytesio_traverse, /*tp_traverse*/ (inquiry)bytesio_clear, /*tp_clear*/ diff -r dc0811953034 Modules/_io/stringio.c --- a/Modules/_io/stringio.c Fri Mar 25 12:50:54 2016 +0100 +++ b/Modules/_io/stringio.c Fri Mar 25 14:31:42 2016 +0100 @@ -639,6 +639,9 @@ stringio_clear(stringio *self) static void stringio_dealloc(stringio *self) { + if (_PyIOBase_finalize((PyObject *) self) < 0) + return; + _PyObject_GC_UNTRACK(self); self->ok = 0; if (self->buf) { @@ -1062,8 +1065,8 @@ PyTypeObject PyStringIO_Type = { 0, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE - | Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC + | Py_TPFLAGS_HAVE_FINALIZE, /*tp_flags*/ _io_StringIO___init____doc__, /*tp_doc*/ (traverseproc)stringio_traverse, /*tp_traverse*/ (inquiry)stringio_clear, /*tp_clear*/