Index: twisted/web/client.py
===================================================================
--- twisted/web/client.py	(revision 30532)
+++ twisted/web/client.py	(working copy)
@@ -785,21 +785,21 @@
         """
         protos = self._protocolCache.setdefault((scheme, host, port), [])
         maybeDisconnected = False
-        while protos:
-            # connection exists
-            p = protos.pop(0)
+        d = None
+        for p in protos:
             if p.state == 'QUIESCENT':
+                # available existing connection
                 d = defer.succeed(p)
                 maybeDisconnected = True
                 break
-        else:
+        if not d:
             # new connection
             d = self._connect(scheme, host, port)
         req = Request(method, path, headers, bodyProducer,
                       persistent=self.persistent)
 
         def saveProtocol(response, proto):
-            if self.persistent:
+            if self.persistent and proto not in protos:
                 protos.append(proto)
             return response
 
