a6a48fdd8c
- Source1 (FAQ.sgml) points to local source (upstream's moved to wiki)
190 lines
6.5 KiB
Diff
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 {
|