]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
merged from trunk
authorAmos Jeffries <squid3@treenet.co.nz>
Mon, 10 Aug 2009 11:11:47 +0000 (23:11 +1200)
committerAmos Jeffries <squid3@treenet.co.nz>
Mon, 10 Aug 2009 11:11:47 +0000 (23:11 +1200)
1  2 
configure.in
src/helper.cc

diff --cc configure.in
index 80a6492d5347bf61f9632692158fe1d3e27a264a,ade54a2148ca82cf61c55d0b41ada51d09e8cbd7..fca3906b54635d555f01646d66355b4db0776658
@@@ -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 b06ccf9ed232071379f0b05a62615766e91ad676,8f4c6db3e4aa9e379e71687f2b2f4fd06c55c59f..ade7eb6909cd73f00c7c5b262a26a25bd9417638
@@@ -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)
  {
      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");