diff options
-rw-r--r-- | Lib/test/test_file2k.py | 12 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Objects/fileobject.c | 6 |
3 files changed, 18 insertions, 3 deletions
diff --git a/Lib/test/test_file2k.py b/Lib/test/test_file2k.py index accdc95..da2ab67 100644 --- a/Lib/test/test_file2k.py +++ b/Lib/test/test_file2k.py @@ -429,6 +429,7 @@ class FileThreadingTests(unittest.TestCase): self._count_lock = threading.Lock() self.close_count = 0 self.close_success_count = 0 + self.use_buffering = False def tearDown(self): if self.f: @@ -443,7 +444,10 @@ class FileThreadingTests(unittest.TestCase): test_support.threading_cleanup(*self._threads) def _create_file(self): - self.f = open(self.filename, "w+") + if self.use_buffering: + self.f = open(self.filename, "w+", buffering=1024*16) + else: + self.f = open(self.filename, "w+") def _close_file(self): with self._count_lock: @@ -530,6 +534,12 @@ class FileThreadingTests(unittest.TestCase): print >> self.f, '' self._test_close_open_io(io_func) + def test_close_open_print_buffered(self): + self.use_buffering = True + def io_func(): + print >> self.f, '' + self._test_close_open_io(io_func) + def test_close_open_read(self): def io_func(): self.f.read(0) @@ -12,6 +12,9 @@ What's New in Python 2.7 Release Candidate 1? Core and Builtins ----------------- +- Issue #7079: Fix a possible crash when closing a file object while using + it from another thread. Patch by Daniel Stutzbach. + Library ------- diff --git a/Objects/fileobject.c b/Objects/fileobject.c index 6b95a0c..d83c054 100644 --- a/Objects/fileobject.c +++ b/Objects/fileobject.c @@ -649,8 +649,10 @@ static PyObject * file_close(PyFileObject *f) { PyObject *sts = close_the_file(f); - PyMem_Free(f->f_setbuf); - f->f_setbuf = NULL; + if (sts) { + PyMem_Free(f->f_setbuf); + f->f_setbuf = NULL; + } return sts; } |