]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Merge from trunk
authorAmos Jeffries <squid3@treenet.co.nz>
Thu, 15 Jul 2010 10:04:21 +0000 (22:04 +1200)
committerAmos Jeffries <squid3@treenet.co.nz>
Thu, 15 Jul 2010 10:04:21 +0000 (22:04 +1200)
1  2 
src/CommCalls.h
src/HttpRequest.cc
src/client_side_request.cc
src/forward.cc

diff --cc src/CommCalls.h
Simple merge
Simple merge
Simple merge
diff --cc src/forward.cc
index 8535ec8fd3651ffef292c63ec19f858e62bd2abf,fcc5d009f4b462e6967816aef6a81cdfa20187d7..7e531a420a0934aec2dccb68e63ffa4f1c0cf164
@@@ -490,19 -504,39 +490,22 @@@ FwdState::retryOrBail(
      }
  
      if (checkRetry()) {
 -        int originserver = (servers->_peer == NULL);
 -        debugs(17, 3, "fwdServerClosed: re-forwarding (" << n_tries << " tries, " << (squid_curtime - start_t) << " secs)");
 -
 -        if (servers->next) {
 -            /* use next, or cycle if origin server isn't last */
 -            FwdServer *fs = servers;
 -            FwdServer **T, *T2 = NULL;
 -            servers = fs->next;
 -
 -            for (T = &servers; *T; T2 = *T, T = &(*T)->next);
 -            if (T2 && T2->_peer) {
 -                /* cycle */
 -                *T = fs;
 -                fs->next = NULL;
 -            } else {
 -                /* Use next. The last "direct" entry is retried multiple times */
 -                servers = fs->next;
 -                fwdServerFree(fs);
 -                originserver = 0;
 -            }
 -        }
 +        debugs(17, 3, HERE << "re-forwarding (" << n_tries << " tries, " << (squid_curtime - start_t) << " secs)");
  
 -        /* Ditch error page if it was created before.
 -         * A new one will be created if there's another problem */
 -        if (err) {
 -            errorStateFree(err);
 -            err = NULL;
 -        }
 +        paths.shift(); // last one failed. try another.
  
 -        /* use eventAdd to break potential call sequence loops and to slow things down a little */
 -        eventAdd("fwdConnectStart", fwdConnectStartWrapper, this, originserver ? 0.05 : 0.005, 0);
 +        if (paths.size() > 0) {
 +            /* Ditch error page if it was created before.
 +             * A new one will be created if there's another problem */
-             err = NULL;
++            if (err) {
++                errorStateFree(err);
++                err = NULL;
++            }
  
 -        return;
 +            connectStart();
 +            return;
 +        }
 +        // else bail. no more paths possible to try.
      }
  
      if (!err && shutting_down) {