From: Amos Jeffries Date: Thu, 15 Jul 2010 10:04:21 +0000 (+1200) Subject: Merge from trunk X-Git-Tag: take08~55^2~124^2~122 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8845a0b4bdf2ed979185c40e19e3bdb853c1100d;p=thirdparty%2Fsquid.git Merge from trunk --- 8845a0b4bdf2ed979185c40e19e3bdb853c1100d diff --cc src/forward.cc index 8535ec8fd3,fcc5d009f4..7e531a420a --- a/src/forward.cc +++ b/src/forward.cc @@@ -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) {