Merged revisions 74581 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r74581 | amaury.forgeotdarc | 2009-08-29 20:14:40 +0200 (sam., 29 août 2009) | 3 lines

  #6750: TextIOWrapped could duplicate output when several threads write to it.
  this affect text files opened with io.open(), and the print() function of py3k
........
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index a9094d9..150eff4 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -2051,6 +2051,27 @@
             self.assertEqual(f.errors, "replace")
 
 
+    def test_threads_write(self):
+        # Issue6750: concurrent writes could duplicate data
+        event = threading.Event()
+        with self.open(support.TESTFN, "w", buffering=1) as f:
+            def run(n):
+                text = "Thread%03d\n" % n
+                event.wait()
+                f.write(text)
+            threads = [threading.Thread(target=lambda n=x: run(n))
+                       for x in range(20)]
+            for t in threads:
+                t.start()
+            time.sleep(0.02)
+            event.set()
+            for t in threads:
+                t.join()
+        with self.open(support.TESTFN) as f:
+            content = f.read()
+            for n in range(20):
+                self.assertEquals(content.count("Thread%03d\n" % n), 1)
+
 class CTextIOWrapperTest(TextIOWrapperTest):
 
     def test_initialization(self):