]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug 4796: comm.cc !isOpen(conn->fd) assertion when rotating logs (#382)
authorAlex Rousskov <rousskov@measurement-factory.com>
Mon, 1 Apr 2019 16:58:36 +0000 (16:58 +0000)
committerAmos Jeffries <yadij@users.noreply.github.com>
Thu, 11 Apr 2019 19:58:25 +0000 (07:58 +1200)
Squid abandoned cache.log file descriptor maintenance, calling fd_open()
but then closing the descriptor without fd_close(). If the original file
descriptor value was reused for another purpose, Squid would either hit
the reported assertion or log a "Closing open FD" WARNING (depending on
the new purpose). The cache.log file descriptor is closed on log
rotation and reconfiguration events.

This short-term solution avoids assertions and WARNINGs but sacrifices
cache.log listing in fd_table and, hence, mgr:filedescriptors reports.

The correct long-term solution is to properly maintain descriptor meta
information across cache.log closures/openings, but doing so from inside
of debug.cc is technically difficult due to linking boundaries/problems.

src/main.cc

index 3061e0368adcf8bd696b30eab5b2ccc2627f4aea..fceac029da97cea58975e4dc6813effd0fab9e38 100644 (file)
@@ -1152,7 +1152,9 @@ mainInitialize(void)
 
     _db_init(Debug::cache_log, Debug::debugOptions);
 
-    fd_open(fileno(debug_log), FD_LOG, Debug::cache_log);
+    // Do not register cache.log descriptor with Comm (for now).
+    // See https://bugs.squid-cache.org/show_bug.cgi?id=4796
+    // fd_open(fileno(debug_log), FD_LOG, Debug::cache_log);
 
     debugs(1, DBG_CRITICAL, "Starting Squid Cache version " << version_string << " for " << CONFIG_HOST_TYPE << "...");
     debugs(1, DBG_CRITICAL, "Service Name: " << service_name);