Review?
Adrian
----- Forwarded message from Grahame Bowland <grahame@ucs.uwa.edu.au> -----
Subject: Patch to squid HEAD
From: Grahame Bowland <grahame@ucs.uwa.edu.au>
To: adrian@squid-cache.org
X-Mailer: Evolution/0.99.0 (Preview Release)
Date: 15 Nov 2001 12:40:43 +0800
Hi Adrian,
Attempting to get onto squid-dev, but until then I'll send patches to
you :) This patch removes the dependency on the OS specified FD_SETSIZE
when using polled I/O. Basically it removes fd_set from the delay pools
code and replaces it with an array of chars, as that was the only thing
tying us down to the FD_SETSIZE limit for Squid_MaxFD.
We've been running with this on styx for a few days, since 1024
filedescriptors was too small.
Anyway, patch attached and I used diff -u this time :)
--
Grahame Bowland Email: grahame@ucs.uwa.edu.au
University Communications Services Phone: +61 8 9380 1175
The University of Western Australia Fax: +61 8 9380 1109
? conf.sh
? fdset.patch
? config.log
? config.cache
? config.status
? Makefile
? contrib/Makefile
? errors/Makefile
? icons/Makefile
? icons/anthony-binhex.gif
? icons/anthony-bomb.gif
? icons/anthony-box.gif
? icons/anthony-box2.gif
? icons/anthony-c.gif
? icons/anthony-compressed.gif
? icons/anthony-dir.gif
? icons/anthony-dirup.gif
? icons/anthony-dvi.gif
? icons/anthony-f.gif
? icons/anthony-image.gif
? icons/anthony-image2.gif
? icons/anthony-layout.gif
? icons/anthony-link.gif
? icons/anthony-movie.gif
? icons/anthony-pdf.gif
? icons/anthony-portal.gif
? icons/anthony-ps.gif
? icons/anthony-quill.gif
? icons/anthony-script.gif
? icons/anthony-sound.gif
? icons/anthony-tar.gif
? icons/anthony-tex.gif
? icons/anthony-text.gif
? icons/anthony-unknown.gif
? icons/anthony-xbm.gif
? icons/anthony-xpm.gif
? include/autoconf.h
? include/stamp-h1
? include/stamp-h
? lib/Makefile
? lib/.deps
? scripts/Makefile
? scripts/RunCache
? scripts/RunAccel
? snmplib/Makefile
? snmplib/.deps
? src/Makefile
? src/.deps
? src/cf_gen_defines.h
? src/cf.data
? src/cf_gen
? src/cf_parser.h
? src/squid.conf.default
? src/globals.c
? src/string_arrays.c
? src/repl_modules.c
? src/auth_modules.c
? src/store_modules.c
? src/squid
? src/client
? src/unlinkd
? src/cachemgr
? src/auth/Makefile
? src/auth/.deps
? src/auth/basic/Makefile
? src/auth/basic/.dirstamp
? src/auth/basic/helpers/Makefile
? src/auth/basic/helpers/LDAP/Makefile
? src/auth/basic/helpers/LDAP/.deps
? src/auth/basic/helpers/MSNT/Makefile
? src/auth/basic/helpers/MSNT/.deps
? src/auth/basic/helpers/NCSA/Makefile
? src/auth/basic/helpers/NCSA/.deps
? src/auth/basic/helpers/PAM/Makefile
? src/auth/basic/helpers/PAM/.deps
? src/auth/basic/helpers/SMB/Makefile
? src/auth/basic/helpers/SMB/.deps
? src/auth/basic/helpers/YP/Makefile
? src/auth/basic/helpers/YP/.deps
? src/auth/basic/helpers/getpwnam/Makefile
? src/auth/basic/helpers/getpwnam/.deps
? src/auth/basic/helpers/multi-domain-NTLM/Makefile
? src/auth/digest/Makefile
? src/auth/digest/helpers/Makefile
? src/auth/digest/helpers/password/Makefile
? src/auth/digest/helpers/password/.deps
? src/auth/ntlm/Makefile
? src/auth/ntlm/helpers/Makefile
? src/auth/ntlm/helpers/NTLMSSP/Makefile
? src/auth/ntlm/helpers/NTLMSSP/.deps
? src/auth/ntlm/helpers/NTLMSSP/smbval/Makefile
? src/auth/ntlm/helpers/NTLMSSP/smbval/.deps
? src/auth/ntlm/helpers/fakeauth/Makefile
? src/auth/ntlm/helpers/fakeauth/.deps
? src/auth/ntlm/helpers/no_check/Makefile
? src/fs/Makefile
? src/fs/.deps
? src/fs/aufs/Makefile
? src/fs/aufs/.dirstamp
? src/fs/coss/Makefile
? src/fs/diskd/Makefile
? src/fs/diskd/.deps
? src/fs/null/Makefile
? src/fs/ufs/Makefile
? src/fs/ufs/.dirstamp
? src/repl/Makefile
? src/repl/.deps
? src/repl/heap/Makefile
? src/repl/heap/.dirstamp
? src/repl/lru/Makefile
Index: src/comm_select.c
===================================================================
RCS file: /squid/squid/src/comm_select.c,v
retrieving revision 1.53
diff -u -r1.53 comm_select.c
--- src/comm_select.c 2001/10/24 06:55:44 1.53
+++ src/comm_select.c 2001/11/15 04:36:54
@@ -310,7 +310,7 @@
{
struct pollfd pfds[SQUID_MAXFD];
#if DELAY_POOLS
- fd_set slowfds;
+ char slowfds[SQUID_MAXFD];
#endif
PF *hdl = NULL;
int fd;
@@ -332,7 +332,7 @@
/* Handle any fs callbacks that need doing */
storeDirCallback();
#if DELAY_POOLS
- FD_ZERO(&slowfds);
+ bzero(slowfds, sizeof(slowfds));
#endif
if (commCheckICPIncoming)
comm_poll_icp_incoming();
@@ -358,7 +358,11 @@
#if DELAY_POOLS
case -1:
events |= POLLRDNORM;
- FD_SET(i, &slowfds);
+ if (i < Squid_MaxFD) {
+ slowfds[i] = 1;
+ } else {
+ debug(5, 0) ("WARNING: tried to set FD %d > Squid_MaxFD in slowfds.", i);
+ }
break;
#endif
default:
@@ -437,7 +441,7 @@
if (NULL == (hdl = F->read_handler))
(void) 0;
#if DELAY_POOLS
- else if (FD_ISSET(fd, &slowfds))
+ else if (slowfds[fd])
commAddSlowFd(fd);
#endif
else {
@@ -646,7 +650,7 @@
fd_set pendingfds;
fd_set writefds;
#if DELAY_POOLS
- fd_set slowfds;
+ char slowfds[SQUID_MAXFD];
#endif
PF *hdl = NULL;
int fd;
@@ -673,7 +677,7 @@
getCurrentTime();
#endif
#if DELAY_POOLS
- FD_ZERO(&slowfds);
+ bzero(slowfds, sizeof(slowfds));
#endif
/* Handle any fs callbacks that need doing */
storeDirCallback();
@@ -709,7 +713,11 @@
break;
#if DELAY_POOLS
case -1:
- FD_SET(fd, &slowfds);
+ if (i < Squid_MaxFD) {
+ slowfds[i] = 1;
+ } else {
+ debug(5, 0) ("WARNING: tried to set FD %d > Squid_MaxFD in slowfds.");
+ }
break;
#endif
default:
@@ -813,7 +821,7 @@
if (NULL == (hdl = F->read_handler))
(void) 0;
#if DELAY_POOLS
- else if (FD_ISSET(fd, &slowfds))
+ else if (slowfds[fd])
commAddSlowFd(fd);
#endif
else {
Index: src/delay_pools.c
===================================================================
RCS file: /squid/squid/src/delay_pools.c,v
retrieving revision 1.19
diff -u -r1.19 delay_pools.c
--- src/delay_pools.c 2001/03/19 06:18:42 1.19
+++ src/delay_pools.c 2001/11/15 04:36:55
@@ -89,7 +89,7 @@
typedef union _delayPool delayPool;
static delayPool *delay_data = NULL;
-static fd_set delay_no_delay;
+static char delay_no_delay[SQUID_MAXFD];
static time_t delay_pools_last_update = 0;
static hash_table *delay_id_ptr_hash = NULL;
static long memory_used = 0;
@@ -134,7 +134,7 @@
delayPoolsInit(void)
{
delay_pools_last_update = getCurrentTime();
- FD_ZERO(&delay_no_delay);
+ bzero(delay_no_delay, sizeof(delay_no_delay));
cachemgrRegister("delay", "Delay Pool Levels", delayPoolStats, 0, 1);
}
@@ -283,19 +283,32 @@
void
delaySetNoDelay(int fd)
{
- FD_SET(fd, &delay_no_delay);
+ if (fd < Squid_MaxFD) {
+ delay_no_delay[fd] = 1;
+ } else {
+ debug(77, 1) ("delaySetNoDelay: can't set fd %d, too high\n", fd);
+ }
}
void
delayClearNoDelay(int fd)
{
- FD_CLR(fd, &delay_no_delay);
+ if (fd < Squid_MaxFD) {
+ delay_no_delay[fd] = 0;
+ } else {
+ debug(77, 1) ("delayClearNoDelay: can't clear fd %d, too high\n", fd);
+ }
}
int
delayIsNoDelay(int fd)
{
- return FD_ISSET(fd, &delay_no_delay);
+ if (fd < Squid_MaxFD) {
+ return delay_no_delay[fd];
+ } else {
+ debug(77, 1) ("delayIsNoDelay: can't check fd %d, too high\n", fd);
+ return 0;
+ }
}
static delay_id
Index: src/main.c
===================================================================
RCS file: /squid/squid/src/main.c,v
retrieving revision 1.345
diff -u -r1.345 main.c
--- src/main.c 2001/10/24 06:55:44 1.345
+++ src/main.c 2001/11/15 04:36:56
@@ -573,8 +573,13 @@
#endif
debug_log = stderr;
+#if !HAVE_POLL
+/* the poll code should now never use fd_set, so we
+ * need only worry if using another method
+ */
if (FD_SETSIZE < Squid_MaxFD)
Squid_MaxFD = FD_SETSIZE;
+#endif
#if defined(_SQUID_MSWIN_) || defined(_SQUID_CYGWIN_)
if ((WIN32_init_err = WIN32_Subsystem_Init()))
----- End forwarded message -----
Received on Thu Nov 15 2001 - 06:50:56 MST
This archive was generated by hypermail pre-2.1.9 : Tue Dec 09 2003 - 16:14:38 MST