Commit a3568417 authored by Victor Stinner's avatar Victor Stinner Committed by GitHub

bpo-37054, _pyio: Fix BytesIO and TextIOWrapper __del__() (GH-13601)

Fix destructor _pyio.BytesIO and _pyio.TextIOWrapper: initialize
their _buffer attribute as soon as possible (in the class body),
because it's used by __del__() which calls close().
parent df9b032f
......@@ -873,6 +873,10 @@ class BytesIO(BufferedIOBase):
"""Buffered I/O implementation using an in-memory bytes buffer."""
# Initialize _buffer as soon as possible since it's used by __del__()
# which calls close()
_buffer = None
def __init__(self, initial_bytes=None):
buf = bytearray()
if initial_bytes is not None:
......@@ -900,7 +904,8 @@ class BytesIO(BufferedIOBase):
return memoryview(self._buffer)
def close(self):
self._buffer.clear()
if self._buffer is not None:
self._buffer.clear()
super().close()
def read(self, size=-1):
......@@ -1970,6 +1975,10 @@ class TextIOWrapper(TextIOBase):
_CHUNK_SIZE = 2048
# Initialize _buffer as soon as possible since it's used by __del__()
# which calls close()
_buffer = None
# The write_through argument has no effect here since this
# implementation always writes through. The argument is present only
# so that the signature can match the signature of the C version.
......
Fix destructor :class:`_pyio.BytesIO` and :class:`_pyio.TextIOWrapper`:
initialize their ``_buffer`` attribute as soon as possible (in the class
body), because it's used by ``__del__()`` which calls ``close()``.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment