From: Amos Jeffries Date: Mon, 10 Aug 2009 11:11:47 +0000 (+1200) Subject: merged from trunk X-Git-Tag: SQUID_3_2_0_1~741^2~14 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2e1e4f10bd3ccc01183d99a9cb466f3bc483c5da;p=thirdparty%2Fsquid.git merged from trunk --- 2e1e4f10bd3ccc01183d99a9cb466f3bc483c5da diff --cc configure.in index 80a6492d53,ade54a2148..fca3906b54 --- a/configure.in +++ b/configure.in @@@ -1854,51 -1814,8 +1814,50 @@@ if test -n "$EXTERNAL_ACL_HELPERS"; the fi AC_SUBST(EXTERNAL_ACL_HELPERS) +dnl Select url_rewrite helpers to build +URL_REWRITE_HELPERS=all +AC_ARG_ENABLE(url-rewrite-helpers, + AC_HELP_STRING([--enable-url-rewrite-helpers="list of helpers"], + [This option selects which url_rewrite helpers to + build and install as part of the normal build + process. For a list of available helpers see the + helpers/url_rewrite directory.]), +[ case "$enableval" in + yes) + URL_REWRITE_HELPERS=all + ;; + no) + URL_REWRITE_HELPERS="" + ;; + *) + URL_REWRITE_HELPERS="`echo $enableval| sed -e 's/,/ /g;s/ */ /g'`" + ;; + esac +]) +if test "$URL_REWRITE_HELPERS" = "all" ; then + URL_REWRITE_HELPERS="" + for dir in $srcdir/helpers/url_rewrite/*; do + helper="`basename $dir`" + if test -f $dir/config.test && sh $dir/config.test "$@"; then + URL_REWRITE_HELPERS="$URL_REWRITE_HELPERS $helper" + fi + done +fi +if test -n "$URL_REWRITE_HELPERS"; then + for helper in $URL_REWRITE_HELPERS; do + if test -f $srcdir/helpers/url_rewrite/$helper/Makefile.in; then + : + else + AC_MSG_ERROR(url_rewrite helper $helper does not exist) + fi + done + AC_MSG_NOTICE([url_rewrite helpers built: $URL_REWRITE_HELPERS]) +fi +AC_SUBST(URL_REWRITE_HELPERS) + + AC_ARG_WITH(valgrind-debug, - AC_HELP_STRING([--with-valgrind-debug], - [Include debug instrumentation for use with valgrind]), + AS_HELP_STRING([--with-valgrind-debug],[Include debug instrumentation for use with valgrind]), [ case $withval in yes) valgrind=1 diff --cc src/helper.cc index b06ccf9ed2,8f4c6db3e4..ade7eb6909 --- a/src/helper.cc +++ b/src/helper.cc @@@ -326,10 -321,8 +321,7 @@@ helperSubmit(helper * hlp, const char * debugs(84, 9, "helperSubmit: " << buf); } - /** - * lastserver = "server last used as part of a deferred or reserved - * request sequence" -/* lastserver = "server last used as part of a reserved request sequence" -- */ ++/// lastserver = "server last used as part of a reserved request sequence" void helperStatefulSubmit(statefulhelper * hlp, const char *buf, HLPSCB * callback, void *data, helper_stateful_server * lastserver) { @@@ -387,112 -363,7 +362,7 @@@ debugs(84, 9, "helperStatefulSubmit: placeholder: '" << r->placeholder << "', buf '" << buf << "'."); } - /** - * find an available helper and add a deferred request to it - */ - helper_stateful_server * - helperStatefulDefer(statefulhelper * hlp) - { - if (hlp == NULL) { - debugs(84, 3, "helperStatefulDefer: hlp == NULL"); - return NULL; - } - - debugs(84, 5, "helperStatefulDefer: Running servers " << hlp->n_running); - - if (hlp->n_running == 0) { - debugs(84, 1, "helperStatefulDefer: No running servers!. "); - return NULL; - } - - helper_stateful_server *rv = StatefulGetFirstAvailable(hlp); - - if (rv == NULL) { - /* - * all currently busy; loop through servers and find server - * with the shortest queue - */ - - for (dlink_node *n = hlp->servers.head; n != NULL; n = n->next) { - helper_stateful_server *srv = (helper_stateful_server *)n->data; - - if (srv->flags.reserved == S_HELPER_RESERVED) - continue; - - if (!srv->flags.shutdown) - continue; - - if ((hlp->IsAvailable != NULL) && (srv->data != NULL) && - !(hlp->IsAvailable(srv->data))) - continue; - - if ((rv != NULL) && (rv->deferred_requests < srv->deferred_requests)) - continue; - - rv = srv; - } - } - - if (rv == NULL) { - debugs(84, 1, "helperStatefulDefer: None available."); - return NULL; - } - - /* consistency check: - * when the deferred count is 0, - * submits + releases == deferbyfunc + deferbycb - * Or in english, when there are no deferred requests, the amount - * we have submitted to the queue or cancelled must equal the amount - * we have said we wanted to be able to submit or cancel - */ - if (rv->deferred_requests == 0) - assert(rv->stats.submits + rv->stats.releases == - rv->stats.deferbyfunc + rv->stats.deferbycb); - - rv->flags.reserved = S_HELPER_DEFERRED; - - rv->deferred_requests++; - - rv->stats.deferbyfunc++; - - return rv; - } - - /** - * puts this helper back in the queue. the calling app is required to - * manage the state in the helper. - */ - void - helperStatefulReset(helper_stateful_server * srv) - { - statefulhelper *hlp = srv->parent; - helper_stateful_request *r = srv->request; - - if (r != NULL) { - /* reset attempt DURING an outstaning request */ - debugs(84, 1, "helperStatefulReset: RESET During request " << hlp->id_name << " "); - srv->flags.busy = 0; - srv->roffset = 0; - helperStatefulRequestFree(r); - srv->request = NULL; - } - - srv->flags.busy = 0; - - if (srv->queue.head) { - srv->flags.reserved = S_HELPER_DEFERRED; - helperStatefulServerKickQueue(srv); - } else { - srv->flags.reserved = S_HELPER_FREE; - - if ((srv->parent->OnEmptyQueue != NULL) && (srv->data)) - srv->parent->OnEmptyQueue(srv->data); - - helperStatefulKickQueue(hlp); - } - } - -/* +/** * DPW 2007-05-08 * * helperStatefulReleaseServer tells the helper that whoever was @@@ -513,27 -378,16 +377,16 @@@ helperStatefulReleaseServer(helper_stat srv->stats.releases++; - if (srv->flags.reserved == S_HELPER_DEFERRED) { - assert(srv->deferred_requests); - srv->deferred_requests--; - if (srv->deferred_requests) { - debugs(0,0,HERE << "helperStatefulReleaseServer srv->deferred_requests=" << srv->deferred_requests); - return; - } - if (srv->queue.head) { - debugs(0,0,HERE << "helperStatefulReleaseServer srv->queue.head not NULL"); - return; - } - } - - srv->flags.reserved = S_HELPER_FREE; + srv->flags.reserved = 0; if (srv->parent->OnEmptyQueue != NULL && srv->data) srv->parent->OnEmptyQueue(srv->data); + + helperStatefulServerDone(srv); } +/** return a pointer to the stateful routines data area */ void * helperStatefulServerGetData(helper_stateful_server * srv) -/* return a pointer to the stateful routines data area */ { return srv->data; } @@@ -626,24 -476,21 +478,22 @@@ helperStatefulStats(StoreEntry * sentry for (dlink_node *link = hlp->servers.head; link; link = link->next) { helper_stateful_server *srv = (helper_stateful_server *)link->data; - double tt = 0.001 * tvSubMsec(srv->dispatch_time, - srv->flags.busy ? current_time : srv->answer_time); - storeAppendPrintf(sentry, "%7d\t%7d\t%7d\t%11d\t%c%c%c%c%c\t%7.3f\t%7d\t%s\n", + double tt = 0.001 * tvSubMsec(srv->dispatch_time, srv->flags.busy ? current_time : srv->answer_time); + double tr = 0.001 * tvSubMsec(srv->dispatch_time, current_time); - storeAppendPrintf(sentry, "%7d\t%7d\t%7d\t%11d\t%20d\t%c%c%c%c%c%c\t%7.3f\t%7.3f\t%7d\t%s\n", ++ storeAppendPrintf(sentry, "%7d\t%7d\t%7d\t%11d\t%c%c%c%c%c\t%7.3f\t%7.3f\t%7d\t%s\n", srv->index + 1, srv->rfd, srv->pid, srv->stats.uses, - (int) srv->deferred_requests, srv->flags.busy ? 'B' : ' ', srv->flags.closing ? 'C' : ' ', - srv->flags.reserved == S_HELPER_RESERVED ? 'R' : ' ', - srv->flags.reserved == S_HELPER_DEFERRED ? 'D' : ' ', + srv->flags.reserved ? 'R' : ' ', srv->flags.shutdown ? 'S' : ' ', srv->request ? (srv->request->placeholder ? 'P' : ' ') : ' ', - tt < 0.0 ? 0.0 : tt, - (int) srv->roffset, - srv->request ? log_quote(srv->request->buf) : "(none)"); + tt < 0.0 ? 0.0 : tt, - srv->flags.reserved == S_HELPER_RESERVED || srv->flags.reserved != S_HELPER_DEFERRED || tr > 0.0 ? tr : 0.0, ++ srv->flags.reserved || tr > 0.0 ? tr : 0.0, + (int) srv->roffset, + srv->request ? log_quote(srv->request->buf) : "(none)"); } storeAppendPrintf(sentry, "\nFlags key:\n\n");