mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Issue #7079: Fix a possible crash when closing a file object while using
it from another thread. Patch by Daniel Stutzbach.
This commit is contained in:
parent
af87f9f09f
commit
83137c2e16
3 changed files with 18 additions and 3 deletions
|
@ -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,6 +444,9 @@ class FileThreadingTests(unittest.TestCase):
|
|||
test_support.threading_cleanup(*self._threads)
|
||||
|
||||
def _create_file(self):
|
||||
if self.use_buffering:
|
||||
self.f = open(self.filename, "w+", buffering=1024*16)
|
||||
else:
|
||||
self.f = open(self.filename, "w+")
|
||||
|
||||
def _close_file(self):
|
||||
|
@ -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
|
||||
-------
|
||||
|
||||
|
|
|
@ -649,8 +649,10 @@ static PyObject *
|
|||
file_close(PyFileObject *f)
|
||||
{
|
||||
PyObject *sts = close_the_file(f);
|
||||
if (sts) {
|
||||
PyMem_Free(f->f_setbuf);
|
||||
f->f_setbuf = NULL;
|
||||
}
|
||||
return sts;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue