rpms/squid/devel squid-2.5.STABLE12-fd-config.patch, NONE, 1.1 squid.spec, 1.48, 1.49
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Fri Dec 2 12:23:01 UTC 2005
- Previous message (by thread): rpms/slang/devel slang-LANG.patch,NONE,1.1 slang.spec,1.31,1.32
- Next message (by thread): rpms/policycoreutils/devel .cvsignore, 1.84, 1.85 policycoreutils-rhat.patch, 1.124, 1.125 policycoreutils.spec, 1.182, 1.183 sources, 1.87, 1.88
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: stransky
Update of /cvs/dist/rpms/squid/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv15080
Modified Files:
squid.spec
Added Files:
squid-2.5.STABLE12-fd-config.patch
Log Message:
- fix for #72896 - squid does not support > 1024 file descriptors,
new "--enable-fd-config" option for it.
(work in progress version)
squid-2.5.STABLE12-fd-config.patch:
configure | 28 ++++++++++
configure.in | 10 +++
include/autoconf.h.in | 5 +
src/bit_array.h | 58 ++++++++++++++++++++++
src/cf.data.pre | 9 +++
src/comm.c | 14 ++---
src/comm_select.c | 131 +++++++++++++++++++++++++++++++++++++++-----------
src/delay_pools.c | 12 ++--
src/fd.c | 10 +--
src/globals.h | 1
src/ident.c | 2
src/ipc.c | 2
src/main.c | 16 ++++--
src/mem.c | 4 -
src/snmp_agent.c | 2
src/squid.h | 14 +++++
src/stat.c | 6 +-
src/structs.h | 3 +
src/tools.c | 8 +--
19 files changed, 274 insertions(+), 61 deletions(-)
--- NEW FILE squid-2.5.STABLE12-fd-config.patch ---
--- squid-2.5.STABLE12/configure.in.fdc 2005-10-22 11:56:01.000000000 +0200
+++ squid-2.5.STABLE12/configure.in 2005-12-01 14:21:45.000000000 +0100
@@ -445,6 +445,16 @@
fi
])
+AM_CONDITIONAL(USE_FD_CONFIG, false)
+AC_ARG_ENABLE(fd-config,
+[ --enable-fd-config Enable filedesc config to limit bandwidth usage],
+[ if test "$enableval" = "yes" ; then
+ echo "Filedesc config enabled"
+ AC_DEFINE(FD_CONFIG)
+ AM_CONDITIONAL(USE_FD_CONFIG, true)
+ fi
+])
+
dnl This is a developer only option. Developers know how to set defines
dnl
dnl AC_ARG_ENABLE(mem-gen-trace,
--- squid-2.5.STABLE12/include/autoconf.h.in.fdc 2005-09-13 02:12:34.000000000 +0200
+++ squid-2.5.STABLE12/include/autoconf.h.in 2005-12-01 14:21:45.000000000 +0100
@@ -125,6 +125,11 @@
#undef DELAY_POOLS
/*
+ * Filedesc managment
+ */
+#undef FD_CONFIG
+
+/*
* If you want to log User-Agent request header values, define this.
* By default, they are written to useragent.log in the Squid log
* directory.
--- squid-2.5.STABLE12/configure.fdc 2005-12-01 14:21:45.000000000 +0100
+++ squid-2.5.STABLE12/configure 2005-12-01 14:21:45.000000000 +0100
@@ -2168,6 +2168,34 @@
fi
+if false; then
+ USE_FD_CONFIG_TRUE=
+ USE_FD_CONFIG_FALSE='#'
+else
+ USE_FD_CONFIG_TRUE='#'
+ USE_FD_CONFIG_FALSE=
+fi
+# Check whether --enable-fd-config or --disable-fd-config was given.
+if test "${enable_fd_config+set}" = set; then
+ enableval="$enable_fd_config"
+ if test "$enableval" = "yes" ; then
+ echo "File descriptor config enabled"
+ cat >> confdefs.h <<\EOF
+#define FD_CONFIG 1
+EOF
+
+
+
+if true; then
+ USE_FD_CONFIG_TRUE=
+ USE_FD_CONFIG_FALSE='#'
+else
+ USE_FD_CONFIG_TRUE='#'
+ USE_FD_CONFIG_FALSE=
+fi
+ fi
+
+fi
# Check whether --enable-useragent-log or --disable-useragent-log was given.
--- squid-2.5.STABLE12/src/cf.data.pre.fdc 2005-12-01 14:21:45.000000000 +0100
+++ squid-2.5.STABLE12/src/cf.data.pre 2005-12-01 14:26:43.000000000 +0100
@@ -4161,4 +4161,13 @@
If set to "off" then such HTTP errors will cause the request
or response to be rejected.
DOC_END
+
+NAME: max_filedesc
+IFDEF: FD_CONFIG
+TYPE: int
+DEFAULT: 1024
+LOC: Config.max_filedesc
+DOC_START
+ The maximum number of open file descriptors.
+DOC_END
EOF
--- squid-2.5.STABLE12/src/tools.c.fdc 2005-12-01 14:21:45.000000000 +0100
+++ squid-2.5.STABLE12/src/tools.c 2005-12-01 14:21:45.000000000 +0100
@@ -685,9 +685,9 @@
if (getrlimit(RLIMIT_NOFILE, &rl) < 0) {
debug(50, 0) ("setrlimit: RLIMIT_NOFILE: %s\n", xstrerror());
} else {
- rl.rlim_cur = Squid_MaxFD;
+ rl.rlim_cur = SQUID_NUMFD;
if (rl.rlim_cur > rl.rlim_max)
- Squid_MaxFD = rl.rlim_cur = rl.rlim_max;
+ rl.rlim_cur = rl.rlim_max;
if (setrlimit(RLIMIT_NOFILE, &rl) < 0) {
snprintf(tmp_error_buf, ERROR_BUF_SZ,
"setrlimit: RLIMIT_NOFILE: %s", xstrerror());
@@ -698,9 +698,9 @@
if (getrlimit(RLIMIT_OFILE, &rl) < 0) {
debug(50, 0) ("setrlimit: RLIMIT_NOFILE: %s\n", xstrerror());
} else {
- rl.rlim_cur = Squid_MaxFD;
+ rl.rlim_cur = SQUID_NUMFD;
if (rl.rlim_cur > rl.rlim_max)
- Squid_MaxFD = rl.rlim_cur = rl.rlim_max;
+ rl.rlim_cur = rl.rlim_max;
if (setrlimit(RLIMIT_OFILE, &rl) < 0) {
snprintf(tmp_error_buf, ERROR_BUF_SZ,
"setrlimit: RLIMIT_OFILE: %s", xstrerror());
--- squid-2.5.STABLE12/src/structs.h.fdc 2005-09-03 11:14:43.000000000 +0200
+++ squid-2.5.STABLE12/src/structs.h 2005-12-01 14:21:45.000000000 +0100
@@ -714,6 +714,9 @@
char *store_dir_select_algorithm;
int sleep_after_fork; /* microseconds */
external_acl *externalAclHelperList;
+#if FD_CONFIG
+ int max_filedesc;
+#endif
};
struct _SquidConfig2 {
--- /dev/null 2005-12-01 10:11:45.057668024 +0100
+++ squid-2.5.STABLE12/src/bit_array.h 2005-12-01 14:21:45.000000000 +0100
@@ -0,0 +1,58 @@
+/* */
+
+#ifndef __BIT_ARRAY_H__
+#define __BIT_ARRAY_H__
+
+#if !BIT_ARRAY_ACTIVE
+
+#define BIT_ARRAY fd_set
+#define BA_INIT(arr,len)
+#define BA_FREE(arr)
+
+#define BA_ZERO(arr) FD_ZERO(&arr)
+#define BA_SET(fd,arr) FD_SET(fd,&arr)
+#define BA_CLR(fd,arr) FD_CLR(fd,&arr)
+#define BA_ISSET(fd,arr) FD_ISSET(fd,&arr)
+
+#else
+
+typedef struct _BIT_ARRAY {
+
+ int *p_pool;
+ int len;
+ int offset_mask;
+ int base_shift;
+
+} BIT_ARRAY;
+
+#define BA_INIT(arr,lenght) \
+{ \
+ int i,tmp = sizeof((arr).p_pool[0])*8; \
+ \
+ for(i = 2, (arr).base_shift = 1; i < tmp; i *= 2) \
+ (arr).base_shift++; \
+ (arr).offset_mask = (i-1); \
+ \
+ (arr).len = lenght / (sizeof((arr).p_pool[0])*8) + 1; \
+ (arr).p_pool = xmalloc(sizeof((arr).p_pool[0])*(arr).len); \
+} \
+
+
+#define BA_FREE(arr) \
+{ \
+ if((arr).p_pool) { \
+ xfree((arr).p_pool); \
+ (arr).p_pool = NULL; \
+ } \
+ (arr).len = 0; \
+} \
+
+
+#define BA_ZERO(arr) { memset((arr).p_pool, 0, sizeof((arr).p_pool[0])*(arr).len); }
+#define BA_SET(fdsp, arr) { (arr).p_pool[(fdsp)>>(arr).base_shift]|=(0x1<<((fdsp)&(arr).offset_mask)); }
+#define BA_CLR(fdsp, arr) { (arr).p_pool[(fdsp)>>(arr).base_shift]&=(~(0x1<<((fdsp)&(arr).offset_mask))); }
+#define BA_ISSET(fdsp, arr) ((arr).p_pool[(fdsp)>>(arr).base_shift]&(0x1<<((fdsp)&(arr).offset_mask)))
+
+#endif // BIT_ARRAY_ACTIVE
+
+#endif //__BIT_ARRAY_H__
--- squid-2.5.STABLE12/src/fd.c.fdc 2003-12-14 13:30:36.000000000 +0100
+++ squid-2.5.STABLE12/src/fd.c 2005-12-01 14:21:45.000000000 +0100
@@ -55,7 +55,7 @@
{
if (fd < Biggest_FD)
return;
- assert(fd < Squid_MaxFD);
+ assert(fd < SQUID_NUMFD);
if (fd > Biggest_FD) {
/*
* assert that we are not closing a FD bigger than
@@ -158,7 +158,7 @@
{
int i;
fde *F;
- for (i = 0; i < Squid_MaxFD; i++) {
+ for (i = 0; i < SQUID_NUMFD; i++) {
F = &fd_table[i];
if (!F->flags.open)
continue;
@@ -175,7 +175,7 @@
int
fdNFree(void)
{
- return Squid_MaxFD - Number_FD - Opening_FD;
+ return SQUID_NUMFD - Number_FD - Opening_FD;
}
int
@@ -204,10 +204,10 @@
/*
* Calculate a new reserve, based on current usage and a small extra
*/
- new = Squid_MaxFD - Number_FD + XMIN(25, Squid_MaxFD / 16);
+ new = SQUID_NUMFD - Number_FD + XMIN(25, SQUID_NUMFD / 16);
if (new <= RESERVED_FD)
return;
- x = Squid_MaxFD - 20 - XMIN(25, Squid_MaxFD / 16);
+ x = SQUID_NUMFD - 20 - XMIN(25, SQUID_NUMFD / 16);
if (new > x) {
/* perhaps this should be fatal()? -DW */
debug(51, 0) ("WARNING: This machine has a serious shortage of filedescriptors.\n");
--- squid-2.5.STABLE12/src/mem.c.fdc 2001-09-07 20:02:45.000000000 +0200
+++ squid-2.5.STABLE12/src/mem.c 2005-12-01 14:21:45.000000000 +0100
@@ -224,13 +224,13 @@
memDataInit(MEM_HTTP_HDR_CONTENT_RANGE, "HttpHdrContRange", sizeof(HttpHdrContRange), 0);
memDataInit(MEM_INTLIST, "intlist", sizeof(intlist), 0);
memDataInit(MEM_MEMOBJECT, "MemObject", sizeof(MemObject),
- Squid_MaxFD >> 3);
+ SQUID_NUMFD >> 3);
memDataInit(MEM_MEM_NODE, "mem_node", sizeof(mem_node), 0);
memDataInit(MEM_NETDBENTRY, "netdbEntry", sizeof(netdbEntry), 0);
memDataInit(MEM_NET_DB_NAME, "net_db_name", sizeof(net_db_name), 0);
memDataInit(MEM_RELIST, "relist", sizeof(relist), 0);
memDataInit(MEM_REQUEST_T, "request_t", sizeof(request_t),
- Squid_MaxFD >> 3);
+ SQUID_NUMFD >> 3);
memDataInit(MEM_STOREENTRY, "StoreEntry", sizeof(StoreEntry), 0);
memDataInit(MEM_WORDLIST, "wordlist", sizeof(wordlist), 0);
memDataInit(MEM_CLIENT_INFO, "ClientInfo", sizeof(ClientInfo), 0);
--- squid-2.5.STABLE12/src/comm_select.c.fdc 2003-05-11 19:30:13.000000000 +0200
+++ squid-2.5.STABLE12/src/comm_select.c 2005-12-01 14:21:45.000000000 +0100
@@ -66,10 +66,10 @@
#if !HAVE_POLL
static struct timeval zero_tv;
#endif
-static fd_set global_readfds;
-static fd_set global_writefds;
static int nreadfds;
static int nwritefds;
+static BIT_ARRAY global_readfds;
+static BIT_ARRAY global_writefds;
/*
* Automatic tuning for incoming requests:
@@ -171,13 +171,39 @@
}
#if DELAY_POOLS
+
+#if FD_CONFIG
+static int *slowfdarr = NULL;
+static int slowfdmax;
+#else
+static int slowfdarr[SQUID_NUMFD];
+static int slowfdmax = SQUID_NUMFD;
+#endif
+
static int slowfdcnt = 0;
-static int slowfdarr[SQUID_MAXFD];
+
+#if FD_CONFIG
+void
+comm_slow_fd_init(int fd_num)
+{
+ slowfdarr = xmalloc(sizeof(slowfdarr[0])*fd_num);
+ slowfdmax = fd_num;
+ slowfdcnt = 0;
+}
+
+void
+comm_slow_fd_destroy(void)
+{
+ xfree(slowfdarr);
+ slowfdarr = NULL;
+ slowfdmax = slowfdcnt = 0;
+}
+#endif
static void
commAddSlowFd(int fd)
{
- assert(slowfdcnt < SQUID_MAXFD);
+ assert(slowfdcnt < slowfdmax);
slowfdarr[slowfdcnt++] = fd;
}
@@ -308,9 +334,13 @@
int
comm_poll(int msec)
{
- struct pollfd pfds[SQUID_MAXFD];
+#if FD_CONFIG
+ struct pollfd *pfds = NULL;
+#else
+ struct pollfd pfds[SQUID_NUMFD];
+#endif
#if DELAY_POOLS
- fd_set slowfds;
+ BIT_ARRAY slowfds;
#endif
PF *hdl = NULL;
int fd;
@@ -323,6 +353,12 @@
int calldns = 0;
static time_t last_timeout = 0;
double timeout = current_dtime + (msec / 1000.0);
+#if FD_CONFIG
+ pfds = xmalloc(sizeof(pfds[0])*SQUID_NUMFD);
+#endif
+#if DELAY_POOLS
+ BA_INIT(slowfds,SQUID_NUMFD);
+#endif
do {
#if !ALARM_UPDATES_TIME
double start;
@@ -332,7 +368,7 @@
/* Handle any fs callbacks that need doing */
storeDirCallback();
#if DELAY_POOLS
- FD_ZERO(&slowfds);
+ BA_ZERO(slowfds);
#endif
if (commCheckICPIncoming)
comm_poll_icp_incoming();
@@ -358,7 +394,7 @@
#if DELAY_POOLS
case -1:
events |= POLLRDNORM;
- FD_SET(i, &slowfds);
+ BA_SET(i, slowfds);
break;
#endif
default:
@@ -378,6 +414,12 @@
}
if (nfds == 0) {
assert(shutting_down);
+#if DELAY_POOLS
+ BA_FREE(slowfds);
+#endif
+#if FD_CONFIG
+ xfree(pfds);
+#endif
return COMM_SHUTDOWN;
}
if (npending)
@@ -394,6 +436,12 @@
continue;
debug(5, 0) ("comm_poll: poll failure: %s\n", xstrerror());
assert(errno != EINVAL);
+#if DELAY_POOLS
+ BA_FREE(slowfds);
+#endif
+#if FD_CONFIG
+ xfree(pfds);
+#endif
return COMM_ERROR;
/* NOTREACHED */
}
@@ -437,7 +485,7 @@
if (NULL == (hdl = F->read_handler))
(void) 0;
#if DELAY_POOLS
- else if (FD_ISSET(fd, &slowfds))
+ else if (BA_ISSET(fd, slowfds))
commAddSlowFd(fd);
#endif
else {
@@ -518,10 +566,22 @@
getCurrentTime();
statCounter.select_time += (current_dtime - start);
#endif
+#if DELAY_POOLS
+ BA_FREE(slowfds);
+#endif
+#if FD_CONFIG
+ xfree(pfds);
+#endif
return COMM_OK;
}
while (timeout > current_dtime);
debug(5, 8) ("comm_poll: time out: %ld.\n", (long int) squid_curtime);
+#if DELAY_POOLS
+ BA_FREE(slowfds);
+#endif
+#if FD_CONFIG
+ xfree(pfds);
+#endif
return COMM_TIMEOUT;
}
@@ -646,7 +706,7 @@
fd_set pendingfds;
fd_set writefds;
#if DELAY_POOLS
- fd_set slowfds;
+ BIT_ARRAY slowfds;
#endif
PF *hdl = NULL;
int fd;
@@ -668,6 +728,9 @@
struct timeval poll_time;
double timeout = current_dtime + (msec / 1000.0);
fde *F;
+#if DELAY_POOLS
+ BA_INIT(slowfds,SQUID_NUMFD);
+#endif
do {
#if !ALARM_UPDATES_TIME
double start;
@@ -675,7 +738,7 @@
start = current_dtime;
#endif
#if DELAY_POOLS
- FD_ZERO(&slowfds);
+ BA_ZERO(slowfds);
#endif
/* Handle any fs callbacks that need doing */
storeDirCallback();
@@ -687,10 +750,6 @@
comm_select_http_incoming();
callicp = calldns = callhttp = 0;
maxfd = Biggest_FD + 1;
- xmemcpy(&readfds, &global_readfds,
- howmany(maxfd, FD_MASK_BITS) * FD_MASK_BYTES);
- xmemcpy(&writefds, &global_writefds,
- howmany(maxfd, FD_MASK_BITS) * FD_MASK_BYTES);
/* remove stalled FDs, and deal with pending descriptors */
pending = 0;
FD_ZERO(&pendingfds);
@@ -712,7 +771,7 @@
break;
#if DELAY_POOLS
case -1:
- FD_SET(fd, &slowfds);
+ BA_SET(fd, slowfds);
break;
#endif
default:
@@ -741,6 +800,9 @@
#endif
if (nreadfds + nwritefds == 0) {
assert(shutting_down);
+#if DELAY_POOLS
+ BA_FREE(slowfds);
+#endif
return COMM_SHUTDOWN;
}
if (msec > MAX_POLL_TIME)
@@ -760,6 +822,9 @@
debug(50, 0) ("comm_select: select failure: %s\n",
xstrerror());
examine_select(&readfds, &writefds);
+#if DELAY_POOLS
+ BA_FREE(slowfds);
+#endif
return COMM_ERROR;
/* NOTREACHED */
}
@@ -812,7 +877,7 @@
if (NULL == (hdl = F->read_handler))
(void) 0;
#if DELAY_POOLS
- else if (FD_ISSET(fd, &slowfds))
+ else if (BA_ISSET(fd, slowfds))
commAddSlowFd(fd);
#endif
else {
@@ -901,10 +966,16 @@
getCurrentTime();
statCounter.select_time += (current_dtime - start);
#endif
+#if DELAY_POOLS
+ BA_FREE(slowfds);
+#endif
return COMM_OK;
}
while (timeout > current_dtime);
debug(5, 8) ("comm_select: time out: %d\n", (int) squid_curtime);
+#if DELAY_POOLS
+ BA_FREE(slowfds);
+#endif
return COMM_TIMEOUT;
}
#endif
@@ -950,8 +1021,12 @@
cachemgrRegister("comm_incoming",
"comm_incoming() stats",
commIncomingStats, 0, 1);
- FD_ZERO(&global_readfds);
- FD_ZERO(&global_writefds);
+
+ BA_INIT(global_readfds,SQUID_NUMFD);
+ BA_INIT(global_writefds,SQUID_NUMFD);
+
+ BA_ZERO(global_readfds);
+ BA_ZERO(global_writefds);
nreadfds = nwritefds = 0;
}
@@ -977,7 +1052,7 @@
fde *F = NULL;
struct stat sb;
debug(5, 0) ("examine_select: Examining open file descriptors...\n");
- for (fd = 0; fd < Squid_MaxFD; fd++) {
+ for (fd = 0; fd < SQUID_NUMFD; fd++) {
FD_ZERO(&read_x);
FD_ZERO(&write_x);
tv.tv_sec = tv.tv_usec = 0;
@@ -1085,11 +1160,11 @@
void
commUpdateReadBits(int fd, PF * handler)
{
- if (handler && !FD_ISSET(fd, &global_readfds)) {
- FD_SET(fd, &global_readfds);
+ if (handler && !BA_ISSET(fd, global_readfds)) {
+ BA_SET(fd, global_readfds);
nreadfds++;
- } else if (!handler && FD_ISSET(fd, &global_readfds)) {
- FD_CLR(fd, &global_readfds);
+ } else if (!handler && BA_ISSET(fd, global_readfds)) {
+ BA_CLR(fd, global_readfds);
nreadfds--;
}
}
@@ -1097,11 +1172,11 @@
void
commUpdateWriteBits(int fd, PF * handler)
{
- if (handler && !FD_ISSET(fd, &global_writefds)) {
- FD_SET(fd, &global_writefds);
+ if (handler && !BA_ISSET(fd, global_writefds)) {
+ BA_SET(fd, global_writefds);
nwritefds++;
- } else if (!handler && FD_ISSET(fd, &global_writefds)) {
- FD_CLR(fd, &global_writefds);
+ } else if (!handler && BA_ISSET(fd, global_writefds)) {
+ BA_CLR(fd, global_writefds);
nwritefds--;
}
}
--- squid-2.5.STABLE12/src/globals.h.fdc 2005-06-14 00:26:21.000000000 +0200
+++ squid-2.5.STABLE12/src/globals.h 2005-12-01 14:21:45.000000000 +0100
@@ -72,7 +72,6 @@
extern int NDnsServersAlloc; /* 0 */
extern int NHttpSockets; /* 0 */
extern int RESERVED_FD;
-extern int Squid_MaxFD; /* SQUID_MAXFD */
extern int config_lineno; /* 0 */
extern int debugLevels[MAX_DEBUG_SECTIONS];
extern int do_mallinfo; /* 0 */
--- squid-2.5.STABLE12/src/ident.c.fdc 2001-04-14 02:03:23.000000000 +0200
+++ squid-2.5.STABLE12/src/ident.c 2005-12-01 14:21:45.000000000 +0100
@@ -238,7 +238,7 @@
identInit(void)
{
ident_hash = hash_create((HASHCMP *) strcmp,
- hashPrime(Squid_MaxFD / 8),
+ hashPrime(SQUID_NUMFD / 8),
hash4);
}
--- squid-2.5.STABLE12/src/snmp_agent.c.fdc 2004-06-01 00:39:00.000000000 +0200
+++ squid-2.5.STABLE12/src/snmp_agent.c 2005-12-01 14:21:45.000000000 +0100
@@ -289,7 +289,7 @@
break;
case PERF_SYS_CURUNUSED_FD:
Answer = snmp_var_new_integer(Var->name, Var->name_length,
- (snint) Squid_MaxFD - Number_FD,
+ (snint) SQUID_NUMFD - Number_FD,
SMI_GAUGE32);
break;
case PERF_SYS_CURRESERVED_FD:
--- squid-2.5.STABLE12/src/comm.c.fdc 2005-09-10 12:17:55.000000000 +0200
+++ squid-2.5.STABLE12/src/comm.c 2005-12-01 14:21:45.000000000 +0100
@@ -239,7 +239,7 @@
}
/*
- * NOTE: set the listen queue to Squid_MaxFD/4 and rely on the kernel to
+ * NOTE: set the listen queue to Squid_MAXFD/4 and rely on the kernel to
* impose an upper limit. Solaris' listen(3n) page says it has
* no limit on this parameter, but sys/socket.h sets SOMAXCONN
* to 5. HP-UX currently has a limit of 20. SunOS is 5 and
@@ -249,9 +249,9 @@
comm_listen(int sock)
{
int x;
- if ((x = listen(sock, Squid_MaxFD >> 2)) < 0) {
+ if ((x = listen(sock, SQUID_NUMFD >> 2)) < 0) {
debug(50, 0) ("comm_listen: listen(%d, %d): %s\n",
- Squid_MaxFD >> 2,
+ SQUID_NUMFD >> 2,
sock, xstrerror());
return x;
}
@@ -441,7 +441,7 @@
fde *F;
debug(5, 3) ("commSetTimeout: FD %d timeout %d\n", fd, timeout);
assert(fd >= 0);
- assert(fd < Squid_MaxFD);
+ assert(fd < SQUID_NUMFD);
F = &fd_table[fd];
assert(F->flags.open);
if (timeout < 0) {
@@ -637,7 +637,7 @@
debug(5, 5) ("comm_close: FD %d\n", fd);
assert(fd >= 0);
- assert(fd < Squid_MaxFD);
+ assert(fd < SQUID_NUMFD);
F = &fd_table[fd];
if (F->flags.closing)
@@ -862,12 +862,12 @@
void
comm_init(void)
{
- fd_table = xcalloc(Squid_MaxFD, sizeof(fde));
+ fd_table = xcalloc(SQUID_NUMFD, sizeof(fde));
/* XXX account fd_table */
/* Keep a few file descriptors free so that we don't run out of FD's
* after accepting a client but before it opens a socket or a file.
* Since Squid_MaxFD can be as high as several thousand, don't waste them */
- RESERVED_FD = XMIN(100, Squid_MaxFD / 4);
+ RESERVED_FD = XMIN(100, SQUID_NUMFD / 4);
CBDATA_INIT_TYPE(ConnectStateData);
comm_write_pool = memPoolCreate("CommWriteStateData", sizeof(CommWriteStateData));
conn_close_pool = memPoolCreate("close_handler", sizeof(close_handler));
--- squid-2.5.STABLE12/src/ipc.c.fdc 2001-10-17 22:25:02.000000000 +0200
+++ squid-2.5.STABLE12/src/ipc.c 2005-12-01 14:21:45.000000000 +0100
@@ -276,7 +276,7 @@
close(t2);
close(t3);
/* Make sure all other filedescriptors are closed */
- for (x = 3; x < SQUID_MAXFD; x++)
+ for (x = 3; x < SQUID_NUMFD; x++)
close(x);
#if HAVE_SETSID
setsid();
--- squid-2.5.STABLE12/src/main.c.fdc 2005-06-27 23:24:28.000000000 +0200
+++ squid-2.5.STABLE12/src/main.c 2005-12-01 14:21:45.000000000 +0100
@@ -350,6 +350,9 @@
#else
idnsShutdown();
#endif
+#if FD_CONFIG
+ comm_slow_fd_destroy();
+#endif
redirectShutdown();
authenticateShutdown();
externalAclShutdown();
@@ -383,6 +386,9 @@
#if USE_WCCP
wccpInit();
#endif
+#if FD_CONFIG
+ comm_slow_fd_init(SQUID_NUMFD);
+#endif
serverConnectionsOpen();
if (theOutIcpConnection >= 0) {
if (!Config2.Accel.on || Config.onoff.accel_with_proxy)
@@ -494,7 +500,7 @@
version_string,
CONFIG_HOST_TYPE);
debug(1, 1) ("Process ID %d\n", (int) getpid());
- debug(1, 1) ("With %d file descriptors available\n", Squid_MaxFD);
+ debug(1, 1) ("With %d file descriptors available\n", SQUID_NUMFD);
if (!configured_once)
disk_init(); /* disk_init must go before ipcache_init() */
@@ -506,6 +512,9 @@
#else
idnsInit();
#endif
+#if FD_CONFIG
+ comm_slow_fd_init(SQUID_NUMFD);
+#endif
redirectInit();
authenticateInit(&Config.authConfig);
externalAclInit();
@@ -600,8 +609,6 @@
#endif
debug_log = stderr;
- if (FD_SETSIZE < Squid_MaxFD)
- Squid_MaxFD = FD_SETSIZE;
#if defined(_SQUID_MSWIN_) || defined(_SQUID_CYGWIN_)
if ((WIN32_init_err = WIN32_Subsystem_Init()))
@@ -977,6 +985,9 @@
#endif
releaseServerSockets();
commCloseAllSockets();
+#if FD_CONFIG
+ comm_slow_fd_destroy();
+#endif
authenticateShutdown();
#if USE_UNLINKD
unlinkdClose();
--- squid-2.5.STABLE12/src/stat.c.fdc 2005-03-29 11:52:00.000000000 +0200
+++ squid-2.5.STABLE12/src/stat.c 2005-12-01 14:21:45.000000000 +0100
@@ -451,7 +451,7 @@
"Remote Address",
"Description");
storeAppendPrintf(sentry, "---- ------ ---- -------- -------- --------------------- ------------------------------\n");
- for (i = 0; i < Squid_MaxFD; i++) {
+ for (i = 0; i < SQUID_NUMFD; i++) {
f = &fd_table[i];
if (!f->flags.open)
continue;
@@ -634,7 +634,7 @@
storeAppendPrintf(sentry, "File descriptor usage for %s:\n", appname);
storeAppendPrintf(sentry, "\tMaximum number of file descriptors: %4d\n",
- Squid_MaxFD);
+ SQUID_NUMFD);
storeAppendPrintf(sentry, "\tLargest file desc currently in use: %4d\n",
Biggest_FD);
storeAppendPrintf(sentry, "\tNumber of file desc currently in use: %4d\n",
@@ -1026,7 +1026,7 @@
statHistEnumInit(&C->comm_icp_incoming, INCOMING_ICP_MAX);
statHistEnumInit(&C->comm_dns_incoming, INCOMING_DNS_MAX);
statHistEnumInit(&C->comm_http_incoming, INCOMING_HTTP_MAX);
- statHistIntInit(&C->select_fds_hist, 256); /* was SQUID_MAXFD, but it is way too much. It is OK to crop this statistics */
+ statHistIntInit(&C->select_fds_hist, 256); /* was SQUID_NUMFD, but it is way too much. It is OK to crop this statistics */
}
/* add special cases here as they arrive */
--- squid-2.5.STABLE12/src/delay_pools.c.fdc 2005-10-20 19:30:31.000000000 +0200
+++ squid-2.5.STABLE12/src/delay_pools.c 2005-12-01 14:21:45.000000000 +0100
@@ -89,7 +89,7 @@
typedef union _delayPool delayPool;
static delayPool *delay_data = NULL;
-static fd_set delay_no_delay;
+static BIT_ARRAY delay_no_delay;
static time_t delay_pools_last_update = 0;
static hash_table *delay_id_ptr_hash = NULL;
static long memory_used = 0;
@@ -134,7 +134,8 @@
delayPoolsInit(void)
{
delay_pools_last_update = getCurrentTime();
- FD_ZERO(&delay_no_delay);
+ BA_INIT(delay_no_delay,SQUID_NUMFD);
+ BA_ZERO(delay_no_delay);
cachemgrRegister("delay", "Delay Pool Levels", delayPoolStats, 0, 1);
}
@@ -169,6 +170,7 @@
hashFreeItems(delay_id_ptr_hash, delayIdZero);
hashFreeMemory(delay_id_ptr_hash);
delay_id_ptr_hash = NULL;
+ BA_FREE(delay_no_delay);
}
void
@@ -283,19 +285,19 @@
void
delaySetNoDelay(int fd)
{
- FD_SET(fd, &delay_no_delay);
+ BA_SET(fd, delay_no_delay);
}
void
delayClearNoDelay(int fd)
{
- FD_CLR(fd, &delay_no_delay);
+ BA_CLR(fd, delay_no_delay);
}
int
delayIsNoDelay(int fd)
{
- return FD_ISSET(fd, &delay_no_delay);
+ return BA_ISSET(fd, delay_no_delay);
}
static delay_id
--- squid-2.5.STABLE12/src/squid.h.fdc 2005-03-26 03:50:53.000000000 +0100
+++ squid-2.5.STABLE12/src/squid.h 2005-12-01 14:21:45.000000000 +0100
@@ -400,6 +401,20 @@
#include "cache_snmp.h"
#endif
+#if !HAVE_POLL
+#define FD_CONFIG 0
+#endif
+
+#if FD_CONFIG
+#define SQUID_NUMFD (Config.max_filedesc)
+#define BIT_ARRAY_ACTIVE 1
+#else
+#define SQUID_NUMFD SQUID_MAXFD
+#define BIT_ARRAY_ACTIVE 0
+#endif
+
+#include "bit_array.h"
+
#include "hash.h"
#include "rfc1035.h"
Index: squid.spec
===================================================================
RCS file: /cvs/dist/rpms/squid/devel/squid.spec,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -r1.48 -r1.49
--- squid.spec 28 Nov 2005 10:19:23 -0000 1.48
+++ squid.spec 2 Dec 2005 12:22:59 -0000 1.49
@@ -31,6 +31,7 @@
Patch205: squid-2.5.STABLE5-pipe.patch
Patch206: squid-2.5.STABLE12-libbind.patch
Patch207: squid-2.5.STABLE12-64bit.patch
+Patch208: squid-2.5.STABLE12-fd-config.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-root
Prereq: /sbin/chkconfig logrotate shadow-utils
@@ -62,6 +63,7 @@
%patch205 -p1 -b .pipe
%patch206 -p1 -b .libbind
%patch207 -p1 -b .stat
+%patch208 -p1 -b .fdc
%build
export CFLAGS="-fPIE -Os -g -pipe -fsigned-char" ; export LDFLAGS=-pie ;
@@ -95,6 +97,7 @@
--enable-cache-digests \
--enable-ident-lookups \
--with-large-files \
+ --enable-fd-config \
export CFLAGS="-fPIE -Os -g -pipe -fsigned-char" ; export LDFLAGS=-pie ;
make %{?_smp_mflags}
@@ -313,6 +316,9 @@
* Mon Nov 28 2005 Martin Stransky <stransky at redhat.com> 7:2.5.STABLE12-2
- rewriten patch squid-2.5.STABLE10-64bit.patch, it works with
"--with-large-files" option now
+- fix for #72896 - squid does not support > 1024 file descriptors,
+ new "--enable-fd-config" option for it.
+ (work in progress version)
* Wed Nov 9 2005 Martin Stransky <stransky at redhat.com> 7:2.5.STABLE12-1
- update to STABLE12
- Previous message (by thread): rpms/slang/devel slang-LANG.patch,NONE,1.1 slang.spec,1.31,1.32
- Next message (by thread): rpms/policycoreutils/devel .cvsignore, 1.84, 1.85 policycoreutils-rhat.patch, 1.124, 1.125 policycoreutils.spec, 1.182, 1.183 sources, 1.87, 1.88
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-cvs-commits
mailing list