squid/squid-2.6.STABLE16-fd.patch
Martin Bacovsky a6a48fdd8c - our fd_config patch was replaced by upstream's version
- Source1 (FAQ.sgml) points to local source (upstream's moved to wiki)
2007-09-25 12:25:50 +00:00

190 lines
6.5 KiB
Diff

diff -up squid-2.6.STABLE16/src/tools.c.fd squid-2.6.STABLE16/src/tools.c
--- squid-2.6.STABLE16/src/tools.c.fd 2007-09-01 22:09:50.000000000 +0200
+++ squid-2.6.STABLE16/src/tools.c 2007-09-21 15:01:32.000000000 +0200
@@ -1,6 +1,6 @@
/*
- * $Id: tools.c,v 1.250.2.3 2007/09/01 20:09:50 hno Exp $
+ * $Id: tools.c,v 1.255 2007/06/29 00:08:18 hno Exp $
*
* DEBUG: section 21 Misc Functions
* AUTHOR: Harvest Derived
@@ -735,46 +735,62 @@ readPidFile(void)
}
+/* A little piece of glue for odd systems */
+#ifndef RLIMIT_NOFILE
+#ifdef RLIMIT_OFILE
+#define RLIMIT_NOFILE RLIMIT_OFILE
+#endif
+#endif
+
+/* Figure out the number of supported filedescriptors */
void
setMaxFD(void)
{
-#if HAVE_SETRLIMIT
- /* try to use as many file descriptors as possible */
- /* System V uses RLIMIT_NOFILE and BSD uses RLIMIT_OFILE */
+#if HAVE_SETRLIMIT && defined(RLIMIT_NOFILE)
struct rlimit rl;
-#if !defined(_SQUID_CYGWIN_)
-#if defined(RLIMIT_NOFILE)
if (getrlimit(RLIMIT_NOFILE, &rl) < 0) {
- debug(50, 0) ("setrlimit: RLIMIT_NOFILE: %s\n", xstrerror());
- } else {
- rl.rlim_cur = Squid_MaxFD;
- if (rl.rlim_cur > rl.rlim_max)
- Squid_MaxFD = rl.rlim_cur = rl.rlim_max;
- if (setrlimit(RLIMIT_NOFILE, &rl) < 0) {
- snprintf(tmp_error_buf, ERROR_BUF_SZ,
- "setrlimit: RLIMIT_NOFILE: %s", xstrerror());
- fatal_dump(tmp_error_buf);
- }
+ debug(50, 0) ("setrlimit: RLIMIT_NOFILE: %s\n", xstrerror());
+ } else if (Config.max_filedescriptors > 0) {
+ rl.rlim_cur = Config.max_filedescriptors;
+ if (rl.rlim_cur > rl.rlim_max)
+ rl.rlim_max = rl.rlim_cur;
+ if (setrlimit(RLIMIT_NOFILE, &rl)) {
+ debug(50, 0) ("setrlimit: RLIMIT_NOFILE: %s\n", xstrerror());
+ getrlimit(RLIMIT_NOFILE, &rl);
+ rl.rlim_cur = rl.rlim_max;
+ if (setrlimit(RLIMIT_NOFILE, &rl)) {
+ debug(50, 0) ("setrlimit: RLIMIT_NOFILE: %s\n", xstrerror());
+ }
+ }
}
-#elif defined(RLIMIT_OFILE)
- if (getrlimit(RLIMIT_OFILE, &rl) < 0) {
- debug(50, 0) ("setrlimit: RLIMIT_NOFILE: %s\n", xstrerror());
+ if (getrlimit(RLIMIT_NOFILE, &rl) < 0) {
+ debug(50, 0) ("setrlimit: RLIMIT_NOFILE: %s\n", xstrerror());
} else {
- rl.rlim_cur = Squid_MaxFD;
- if (rl.rlim_cur > rl.rlim_max)
- Squid_MaxFD = rl.rlim_cur = rl.rlim_max;
- if (setrlimit(RLIMIT_OFILE, &rl) < 0) {
- snprintf(tmp_error_buf, ERROR_BUF_SZ,
- "setrlimit: RLIMIT_OFILE: %s", xstrerror());
- fatal_dump(tmp_error_buf);
- }
+ Squid_MaxFD = rl.rlim_cur;
}
-#endif
-#endif
-#else /* HAVE_SETRLIMIT */
- debug(21, 1) ("setMaxFD: Cannot increase: setrlimit() not supported on this system\n");
#endif /* HAVE_SETRLIMIT */
+}
+void
+setSystemLimits(void)
+{
+#if HAVE_SETRLIMIT && defined(RLIMIT_NOFILE) && !defined(_SQUID_CYGWIN_)
+ /* limit system filedescriptors to our own limit */
+ struct rlimit rl;
+ if (getrlimit(RLIMIT_NOFILE, &rl) < 0) {
+ debug(50, 0) ("setrlimit: RLIMIT_NOFILE: %s\n", xstrerror());
+ } else {
+ rl.rlim_cur = Squid_MaxFD;
+ if (setrlimit(RLIMIT_NOFILE, &rl) < 0) {
+ snprintf(tmp_error_buf, ERROR_BUF_SZ,
+ "setrlimit: RLIMIT_NOFILE: %s", xstrerror());
+ fatal_dump(tmp_error_buf);
+ }
+ }
+ #endif /* HAVE_SETRLIMIT */
+ if (Config.max_filedescriptors > Squid_MaxFD) {
+ debug(50, 1) ("NOTICE: Could not increase the number of filedescriptors\n");
+ }
#if HAVE_SETRLIMIT && defined(RLIMIT_DATA)
if (getrlimit(RLIMIT_DATA, &rl) < 0) {
debug(50, 0) ("getrlimit: RLIMIT_DATA: %s\n", xstrerror());
diff -up squid-2.6.STABLE16/src/cf.data.pre.fd squid-2.6.STABLE16/src/cf.data.pre
--- squid-2.6.STABLE16/src/cf.data.pre.fd 2007-09-21 12:52:28.000000000 +0200
+++ squid-2.6.STABLE16/src/cf.data.pre 2007-09-21 15:07:15.000000000 +0200
@@ -1,6 +1,6 @@
#
-# $Id: cf.data.pre,v 1.382.2.14 2007/09/05 21:50:15 hno Exp $
+# $Id: cf.data.pre,v 1.424 2007/09/19 11:50:39 hno Exp $
#
# SQUID Web Proxy Cache http://www.squid-cache.org/
# ----------------------------------------------------------
@@ -5216,4 +5216,16 @@ DOC_START
rounded to 1000.
DOC_END
+NAME: max_filedescriptors max_filedesc
+TYPE: int
+DEFAULT: 0
+LOC: Config.max_filedescriptors
+DOC_START
+ The maximum number of filedescriptors supported.
+
+ The default "0" means Squid inherits the current ulimit setting.
+
+ Note: Changing this requires a restart of Squid. Also
+ not all comm loops supports values larger than --with-maxfd.
+DOC_END
EOF
diff -up squid-2.6.STABLE16/src/protos.h.fd squid-2.6.STABLE16/src/protos.h
--- squid-2.6.STABLE16/src/protos.h.fd 2007-07-15 11:52:17.000000000 +0200
+++ squid-2.6.STABLE16/src/protos.h 2007-09-21 15:03:14.000000000 +0200
@@ -1,6 +1,6 @@
/*
- * $Id: protos.h,v 1.520.2.3 2007/07/15 09:52:17 hno Exp $
+ * $Id: protos.h,v 1.531 2007/06/29 00:08:18 hno Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -1102,6 +1102,7 @@ extern void no_suid(void);
extern void writePidFile(void);
extern void setSocketShutdownLifetimes(int);
extern void setMaxFD(void);
+extern void setSystemLimits(void);
extern time_t getCurrentTime(void);
extern int percent(int, int);
extern double dpercent(double, double);
diff -up squid-2.6.STABLE16/src/main.c.fd squid-2.6.STABLE16/src/main.c
--- squid-2.6.STABLE16/src/main.c.fd 2007-08-31 15:52:10.000000000 +0200
+++ squid-2.6.STABLE16/src/main.c 2007-09-21 15:04:01.000000000 +0200
@@ -1,6 +1,6 @@
/*
- * $Id: main.c,v 1.393.2.4 2007/08/31 13:52:10 hno Exp $
+ * $Id: main.c,v 1.397 2007/06/29 00:08:18 hno Exp $
*
* DEBUG: section 1 Startup and Main Loop
* AUTHOR: Harvest Derived
@@ -552,6 +552,7 @@ mainInitialize(void)
debug(1, 0) ("Running on %s\n", WIN32_OS_string);
#endif
debug(1, 1) ("Process ID %d\n", (int) getpid());
+ setSystemLimits();
debug(1, 1) ("With %d file descriptors available\n", Squid_MaxFD);
#ifdef _SQUID_MSWIN_
debug(1, 1) ("With %d CRT stdio descriptors available\n", _getmaxstdio());
diff -up squid-2.6.STABLE16/src/structs.h.fd squid-2.6.STABLE16/src/structs.h
--- squid-2.6.STABLE16/src/structs.h.fd 2007-09-05 23:28:34.000000000 +0200
+++ squid-2.6.STABLE16/src/structs.h 2007-09-21 15:04:49.000000000 +0200
@@ -1,6 +1,6 @@
/*
- * $Id: structs.h,v 1.507.2.8 2007/09/05 21:28:34 hno Exp $
+ * $Id: structs.h,v 1.517 2007/06/28 23:22:01 hno Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -810,6 +810,7 @@ struct _SquidConfig {
#endif
time_t refresh_stale_window;
int umask;
+ int max_filedescriptors;
};
struct _SquidConfig2 {