diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index edb593b..4288f1b 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -2061,6 +2061,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):
diff --git a/Misc/NEWS b/Misc/NEWS
index e9a929a..3b0bd5c 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@
 Core and Builtins
 -----------------
 
+- Issue #6750: A text file opened with io.open() could duplicate its output
+  when writing from multiple threads at the same time.
+
 - Issue #6704: Improve the col_offset in AST for "for" statements with
   a target of tuple unpacking.
 
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
index c129303..3b627f2 100644
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -1189,11 +1189,18 @@
 static int
 _textiowrapper_writeflush(textio *self)
 {
-    PyObject *b, *ret;
+    PyObject *pending, *b, *ret;
 
     if (self->pending_bytes == NULL)
         return 0;
-    b = _PyBytes_Join(_PyIO_empty_bytes, self->pending_bytes);
+
+    pending = self->pending_bytes;
+    Py_INCREF(pending);
+    self->pending_bytes_count = 0;
+    Py_CLEAR(self->pending_bytes);
+
+    b = _PyBytes_Join(_PyIO_empty_bytes, pending);
+    Py_DECREF(pending);
     if (b == NULL)
         return -1;
     ret = PyObject_CallMethodObjArgs(self->buffer,
@@ -1202,8 +1209,6 @@
     if (ret == NULL)
         return -1;
     Py_DECREF(ret);
-    Py_CLEAR(self->pending_bytes);
-    self->pending_bytes_count = 0;
     return 0;
 }
 
