Kaydet (Commit) 83137c2e authored tarafından Antoine Pitrou's avatar Antoine Pitrou

Issue #7079: Fix a possible crash when closing a file object while using

it from another thread.  Patch by Daniel Stutzbach.
üst af87f9f0
......@@ -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
-------
......
......@@ -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;
}
......
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