]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug 5208: Part 1: Restart kids killed by SIGKILL (#1035)
authorAlex Rousskov <rousskov@measurement-factory.com>
Thu, 28 Apr 2022 10:37:56 +0000 (10:37 +0000)
committerSquid Anubis <squid-anubis@squid-cache.org>
Fri, 29 Apr 2022 21:22:10 +0000 (21:22 +0000)
OOM killer uses SIGKILL. Squid did not restart kids killed by SIGKILL.
Kids are essential Squid components. Essential components should be
revived (by default) because providing a service without an essential
component would violate Squid functionality requirements.

Squid did not revive a kid killed by SIGKILL because we thought that
doing so will interfere with the "squid -k kill" feature that uses that
signal to kill the whole Squid instance. However, that feature does not
actually work[^1] -- the signal is sent to (and kills) the master
process only, the process which PID is in squid.pid file. This change is
orthogonal to fixing "squid -k kill" (a difficult out-of-scope project).

[^1]: Except in the special case of the no-daemon (squid -N) mode.

src/ipc/Kid.cc
src/main.cc

index 8c3c7215c08ddc69ffd2fab722f63e3556439659..e2d31dae8220f933a5f026f6b8d626767f02d257 100644 (file)
@@ -100,7 +100,6 @@ bool Kid::shouldRestart() const
              exitedHappy() ||
              hopeless() ||
              shutting_down ||
-             signaled(SIGKILL) || // squid -k kill
              signaled(SIGINT) || // unexpected forced shutdown
              signaled(SIGTERM)); // unexpected forced shutdown
 }
index a42af56307c1bee0c986165cd1ab33487ea9a617..2c31fa969cdde7f7a01a2a5d807a4263d16a2607 100644 (file)
@@ -564,6 +564,7 @@ mainHandleCommandLineOption(const int optId, const char *optValue)
             /** \li On interrupt send SIGINT. */
             opt_send_signal = SIGINT;
         else if (!strncmp(optValue, "kill", strlen(optValue)))
+            // XXX: In SMP mode, uncatchable SIGKILL only kills the master process
             /** \li On kill send SIGKILL. */
             opt_send_signal = SIGKILL;