]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
FwdState should retry connect to the next ip after a Ssl::PeerConnector failure
authorChristos Tsantilas <chtsanti@users.sourceforge.net>
Wed, 16 Dec 2015 13:47:22 +0000 (15:47 +0200)
committerChristos Tsantilas <chtsanti@users.sourceforge.net>
Wed, 16 Dec 2015 13:47:22 +0000 (15:47 +0200)
When the Ssl::PeerConnector fails to establish an SSL connection FwdState does
not retry to connect to the next destination server ip address, but instead
returns an error.

This is a Measurement Factory project

src/FwdState.cc

index 786a8cd2ff1aba8160a37b9768a9d9439d3d0dec..84ab620af86595ec91194c0761b68af387b6a93a 100644 (file)
@@ -680,15 +680,10 @@ FwdState::connectDone(const Comm::ConnectionPointer &conn, Comm::Flag status, in
     }
 
     serverConn = conn;
-    flags.connected_okay = true;
-
     debugs(17, 3, HERE << serverConnection() << ": '" << entry->url() << "'" );
 
     comm_add_close_handler(serverConnection()->fd, fwdServerClosedWrapper, this);
 
-    if (serverConnection()->getPeer())
-        peerConnectSucceded(serverConnection()->getPeer());
-
 #if USE_OPENSSL
     if (!request->flags.pinned) {
         const CachePeer *p = serverConnection()->getPeer();
@@ -727,7 +722,9 @@ FwdState::connectedToPeer(Security::EncryptorAnswer &answer)
     if (ErrorState *error = answer.error.get()) {
         fail(error);
         answer.error.clear(); // preserve error for errorSendComplete()
-        self = NULL;
+        if (CachePeer *p = serverConnection()->getPeer())
+            peerConnectFailed(p);
+        retryOrBail();
         return;
     }
 
@@ -735,6 +732,10 @@ FwdState::connectedToPeer(Security::EncryptorAnswer &answer)
     CallJobHere1(17, 4, request->clientConnectionManager, ConnStateData,
                  ConnStateData::notePeerConnection, serverConnection());
 
+    if (serverConnection()->getPeer())
+        peerConnectSucceded(serverConnection()->getPeer());
+
+    flags.connected_okay = true;
     dispatch();
 }