From ed9cfad6f382f831b927ab233675c33a47d9eafd Mon Sep 17 00:00:00 2001 From: Amos Jeffries Date: Sat, 25 Apr 2009 12:19:35 +1200 Subject: [PATCH] Bug 2276: Too many queued ntlm authenticators running 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 | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/helper.cc b/src/helper.cc index b95c28a61d..28607c09b6 100644 --- a/src/helper.cc +++ b/src/helper.cc @@ -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; -- 2.47.2