diff options
author | Jesus Cea <jcea@jcea.es> | 2012-10-04 10:37:56 (GMT) |
---|---|---|
committer | Jesus Cea <jcea@jcea.es> | 2012-10-04 10:37:56 (GMT) |
commit | dc469454ec997166aea062f5727a8d59bab2f7a0 (patch) | |
tree | d8f0d7ff0a05298ad7c79314eab6e06e964099a6 | |
parent | 279ed3cc55e786c96c11aa9f224c507de5024099 (diff) | |
download | cpython-dc469454ec997166aea062f5727a8d59bab2f7a0.zip cpython-dc469454ec997166aea062f5727a8d59bab2f7a0.tar.gz cpython-dc469454ec997166aea062f5727a8d59bab2f7a0.tar.bz2 |
Closes #15488: Closed files keep their buffer alive
-rw-r--r-- | Lib/test/test_io.py | 8 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Modules/_io/bufferedio.c | 5 |
3 files changed, 16 insertions, 0 deletions
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index d5eec7c..ec0501e 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -815,6 +815,14 @@ class SizeofTest: bufio = self.tp(rawio, buffer_size=bufsize2) self.assertEqual(sys.getsizeof(bufio), size + bufsize2) + @support.cpython_only + def test_buffer_freeing(self) : + bufsize = 4096 + rawio = self.MockRawIO() + bufio = self.tp(rawio, buffer_size=bufsize) + size = sys.getsizeof(bufio) - bufsize + bufio.close() + self.assertEqual(sys.getsizeof(bufio), size) class BufferedReaderTest(unittest.TestCase, CommonBufferedTests): read_mode = "rb" @@ -24,6 +24,9 @@ Core and Builtins - Issue #15839: Convert SystemErrors in `super()` to RuntimeErrors. +- Issue #15448: Buffered IO now frees the buffer when closed, instead + of when deallocating. + - Issue #15846: Fix SystemError which happened when using `ast.parse()` in an exception handler on code with syntax errors. diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 334734b..432349a 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -519,6 +519,11 @@ buffered_close(buffered *self, PyObject *args) res = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_close, NULL); + if (self->buffer) { + PyMem_Free(self->buffer); + self->buffer = NULL; + } + end: LEAVE_BUFFERED(self) return res; |