Index: twisted/internet/iocpreactor/abstract.py
===================================================================
--- twisted/internet/iocpreactor/abstract.py	(revision 36271)
+++ twisted/internet/iocpreactor/abstract.py	(working copy)
@@ -152,6 +152,7 @@
     _writeDisconnecting = False
     _writeDisconnected = False
     writeBufferSize = 2**2**2**2
+    _doWriteCalling = False
 
 
     def loseWriteConnection(self):
@@ -186,10 +187,14 @@
 
     def _resumeWriting(self):
         self._writeScheduled = None
-        self.doWrite()
+        if self._doWriteCalling:
+            self.reactor.callLater(0, self._resumeWriting)
+        else:
+            self.doWrite()
 
 
     def _cbWrite(self, rc, bytes, evt):
+        self._doWriteCalling = False
         if self._handleWrite(rc, bytes, evt):
             self.doWrite()
 
@@ -235,6 +240,7 @@
 
 
     def doWrite(self):
+        self._doWriteCalling = True
         if len(self.dataBuffer) - self.offset < self.SEND_LIMIT:
             # If there is currently less than SEND_LIMIT bytes left to send
             # in the string, extend it with the array data.
