]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug 2276: Too many queued ntlm authenticators running
authorAmos Jeffries <squid3@treenet.co.nz>
Sat, 25 Apr 2009 00:19:35 +0000 (12:19 +1200)
committerAmos Jeffries <squid3@treenet.co.nz>
Sat, 25 Apr 2009 00:19:35 +0000 (12:19 +1200)
This enforces the admin configured number of helpers as a maximum number
running by calculating how many helpers have died and need restarting.

src/helper.cc

index b95c28a61d71b2fc5e2045edb5a3978acae1ab39..28607c09b62dc38dfbbf9f7ede721ac8de4f0a88 100644 (file)
@@ -98,7 +98,14 @@ helperOpenServers(helper * hlp)
     else
         shortname = xstrdup(progname);
 
-    debugs(84, 1, "helperOpenServers: Starting " << hlp->n_to_start << " '" << shortname << "' processes");
+    /* dont ever start more than hlp->n_to_start processes. */
+    int need_new = hlp->n_to_start - hlp->n_running;
+
+    debugs(84, 1, "helperOpenServers: Starting " << need_new << "/" << hlp->n_to_start << " '" << shortname << "' processes");
+
+    if(need_new < 1) {
+        debugs(84, 1, "helperOpenServers: No '" << shortname << "' processes needed.");
+    }
 
     procname = (char *)xmalloc(strlen(shortname) + 3);
 
@@ -113,7 +120,7 @@ helperOpenServers(helper * hlp)
 
     assert(nargs <= HELPER_MAX_ARGS);
 
-    for (k = 0; k < hlp->n_to_start; k++) {
+    for (k = 0; k < need_new; k++) {
         getCurrentTime();
         rfd = wfd = -1;
         pid = ipcCreate(hlp->ipc_type,
@@ -195,7 +202,14 @@ helperStatefulOpenServers(statefulhelper * hlp)
     else
         shortname = xstrdup(progname);
 
-    debugs(84, 1, "helperStatefulOpenServers: Starting " << hlp->n_to_start << " '" << shortname << "' processes");
+    /* dont ever start more than hlp->n_to_start processes. */
+    int need_new = hlp->n_to_start - hlp->n_running;
+
+    debugs(84, 1, "helperOpenServers: Starting " << need_new << "/" << hlp->n_to_start << " '" << shortname << "' processes");
+
+    if(need_new < 1) {
+        debugs(84, 1, "helperStatefulOpenServers: No '" << shortname << "' processes needed.");
+    }
 
     char *procname = (char *)xmalloc(strlen(shortname) + 3);
 
@@ -210,7 +224,7 @@ helperStatefulOpenServers(statefulhelper * hlp)
 
     assert(nargs <= HELPER_MAX_ARGS);
 
-    for (int k = 0; k < hlp->n_to_start; k++) {
+    for (int k = 0; k < need_new; k++) {
         getCurrentTime();
        int rfd = -1;
        int wfd = -1;