diff -ruN squid-2.6.STABLE4/ChangeLog squid-2.6.STABLE5/ChangeLog --- squid-2.6.STABLE4/ChangeLog Fri Sep 22 05:10:14 2006 +++ squid-2.6.STABLE5/ChangeLog Fri Nov 3 06:16:21 2006 @@ -1,4 +1,34 @@ -Changes to squid-2.6.STABLE4 (Sep 22 2006) +Changes to squid-2.6.STABLE5 (Now 3 2006) + + - Bug #1776: 2.6.STABLE4 aufs fails to compile if coss isn't enabled + - COSS improvements and cleanups + - SNMP linking issue resolved, enabling SNMP support to be build in all platforms + - Bug #1784: access_log syslog results in blanks syslog lines between every entry + - Bug #1719: Incorrect error message on invalid cache_peer specifications + - Bug #1785: Memory leak in handling of negatively cached objects + - Bug #1780: Incorrect Vary processing in combination with collapsed_forwarding + - Bug #1782: Memory leak in ncsa_auth on password changes + - Suppress some annoying coss startup messages raising the debug level to 2. + - Clarify the external_acl_helper concurrency= change. + - aioDone() could be called twice from aufs and from coss (when using AIOPS) during shutdown. + - Bug #1794: Accept 00:00-24:00 as a valid time specification even if redundand and the same as 00:00-23:59 + - Bug #1795: Theoretical memory leak in storeSetPublicKey + - Removing port 563 from the default SSL_ports and Safe_ports ACLs + - Bug #1724: Automatically enable Linux Netfilter support with --enable-linux-tproxy. + - Bug #1800: squid -k reconfigure crash when using req/rep_header acls + - Clarify the select/poll/kqueue/epoll configure --enable/disable options + - Bug #1779: Delay pools fairness when multiple connections compete for bandwidth + - Bug #1802: Crash on exit in certain conditions where cache.log is not writeable + - Bug #1796: Assertion error HttpHeader.c:914: "str" + - Bug #1790: Crash on wccp2 + mask assignement + standard wccp service + - Silence harmless gcc compile warning. + - Clean up poll memory on shutdown + - Ported select, poll and win32 to new comm event framework + - Windows port: Correctly identify Windows Vista and Windows Server Longhorn + - Added a basic comm_select_simple comm loop only requiring minimal POSIX compliance. + - Safeguard from kb_t counter overflows on 32-bit platforms + +Changes to squid-2.6.STABLE4 (Sep 23 2006) - Bug #1736: Missing Italian translation of ERR_TOO_BIG error page - Windows port enhancement: added native exception handler with signal emulation diff -ruN squid-2.6.STABLE4/Makefile.in squid-2.6.STABLE5/Makefile.in --- squid-2.6.STABLE4/Makefile.in Fri Sep 22 03:09:34 2006 +++ squid-2.6.STABLE5/Makefile.in Sun Oct 29 19:21:09 2006 @@ -15,7 +15,7 @@ @SET_MAKE@ # -# $Id: Makefile.in,v 1.48 2006/09/22 09:09:34 hno Exp $ +# $Id: Makefile.in,v 1.50 2006/10/30 02:21:09 hno Exp $ # srcdir = @srcdir@ top_srcdir = @top_srcdir@ @@ -120,7 +120,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -204,6 +203,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/RELEASENOTES.html squid-2.6.STABLE5/RELEASENOTES.html --- squid-2.6.STABLE4/RELEASENOTES.html Sat Sep 23 11:50:05 2006 +++ squid-2.6.STABLE5/RELEASENOTES.html Fri Nov 3 06:20:46 2006 @@ -7,7 +7,7 @@

Squid 2.6 release notes

-

Squid Developers

$Id: release-2.6.html,v 1.35 2006/09/22 11:10:14 hno Exp $ +

Squid Developers

$Id: release-2.6.html,v 1.36 2006/11/03 13:16:22 hno Exp $
This document contains the release notes for version 2.6 of Squid. Squid is a WWW Cache application developed by the Web Caching community. @@ -39,6 +39,9 @@

9. Key changes squid-2.6.STABLE3 to 2.6.STABLE4

+

+

10. Key changes squid-2.6.STABLE4 to 2.6.STABLE5

+

1. Key changes from squid 2.5

@@ -165,10 +168,7 @@

There is a few known issues in this version of Squid which we hope to correct in a later release

@@ -475,6 +475,23 @@
  • Bug #1699: assertion failed: authenticate.c:836: "auth_user_request != NULL"
  • a number of other minor and cosmetic bugfixes. See the list of squid-2.6.STABLE4 changes and the +ChangeLog file for details.
  • + +

    + +

    10. Key changes squid-2.6.STABLE4 to 2.6.STABLE5

    + +

    +

    diff -ruN squid-2.6.STABLE4/configure squid-2.6.STABLE5/configure --- squid-2.6.STABLE4/configure Sat Sep 23 11:49:33 2006 +++ squid-2.6.STABLE5/configure Fri Nov 3 06:20:14 2006 @@ -1,7 +1,7 @@ #! /bin/sh -# From configure.in Revision: 1.402 . +# From configure.in Revision: 1.410 . # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59 for Squid Web Proxy 2.6.STABLE4. +# Generated by GNU Autoconf 2.59 for Squid Web Proxy 2.6.STABLE5. # # Report bugs to . # @@ -270,8 +270,8 @@ # Identity of this package. PACKAGE_NAME='Squid Web Proxy' PACKAGE_TARNAME='squid' -PACKAGE_VERSION='2.6.STABLE4' -PACKAGE_STRING='Squid Web Proxy 2.6.STABLE4' +PACKAGE_VERSION='2.6.STABLE5' +PACKAGE_STRING='Squid Web Proxy 2.6.STABLE5' PACKAGE_BUGREPORT='http://www.squid-cache.org/bugs/' ac_default_prefix=/usr/local/squid @@ -312,7 +312,7 @@ # include #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE build build_cpu build_vendor build_os host host_cpu host_vendor host_os PKGCONFIG CGIEXT ENABLE_WIN32SPECIFIC_TRUE ENABLE_WIN32SPECIFIC_FALSE ENABLE_MINGW32SPECIFIC_TRUE ENABLE_MINGW32SPECIFIC_FALSE WIN32_PSAPI CACHE_HTTP_PORT CACHE_ICP_PORT LIBDLMALLOC LIB_MALLOC STORE_OBJS STORE_LIBS STORE_MODULES NEED_DISKD_TRUE NEED_DISKD_FALSE USE_AIOPS_WIN32_TRUE USE_AIOPS_WIN32_FALSE NEED_COSSDUMP_TRUE NEED_COSSDUMP_FALSE REPL_POLICIES REPL_OBJS REPL_LIBS ENABLE_PINGER_TRUE ENABLE_PINGER_FALSE USE_DELAY_POOLS_TRUE USE_DELAY_POOLS_FALSE USE_SNMP_TRUE USE_SNMP_FALSE SNMPLIB makesnmplib ENABLE_HTCP_TRUE ENABLE_HTCP_FALSE ENABLE_SSL_TRUE ENABLE_SSL_FALSE NEED_OWN_MD5_TRUE NEED_OWN_MD5_FALSE SSLLIB ERR_DEFAULT_LANGUAGE ERR_LANGUAGES MAKE_LEAKFINDER_TRUE MAKE_LEAKFINDER_FALSE USE_DNSSERVER_TRUE USE_DNSSERVER_FALSE OPT_DEFAULT_HOSTS AUTH_MODULES AUTH_OBJS AUTH_LIBS BASIC_AUTH_HELPERS NTLM_AUTH_HELPERS DIGEST_AUTH_HELPERS NEGOTIATE_AUTH_HELPERS EXTERNAL_ACL_HELPERS CPP EGREP LIBSASL ENABLE_UNLINKD_TRUE ENABLE_UNLINKD_FALSE RANLIB ac_ct_RANLIB LN_S SH FALSE TRUE RM MV MKDIR LN PERL AR AR_R ALLOCA CRYPTLIB LIB_EPOLL LIB_LDAP LIB_LBER LIB_DB EPOLL_LIBS USE_POLL_TRUE USE_POLL_FALSE USE_EPOLL_TRUE USE_EPOLL_FALSE USE_SELECT_TRUE USE_SELECT_FALSE USE_SELECT_WIN32_TRUE USE_SELECT_WIN32_FALSE USE_KQUEUE_TRUE USE_KQUEUE_FALSE NEED_OWN_SNPRINTF_TRUE NEED_OWN_SNPRINTF_FALSE NEED_OWN_STRSEP_TRUE NEED_OWN_STRSEP_FALSE REGEXLIB LIBREGEX LIBOBJS XTRA_OBJS XTRA_LIBS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE build build_cpu build_vendor build_os host host_cpu host_vendor host_os PKGCONFIG CGIEXT ENABLE_WIN32SPECIFIC_TRUE ENABLE_WIN32SPECIFIC_FALSE ENABLE_MINGW32SPECIFIC_TRUE ENABLE_MINGW32SPECIFIC_FALSE WIN32_PSAPI CACHE_HTTP_PORT CACHE_ICP_PORT LIBDLMALLOC LIB_MALLOC STORE_OBJS STORE_LIBS STORE_MODULES NEED_DISKD_TRUE NEED_DISKD_FALSE USE_AIOPS_WIN32_TRUE USE_AIOPS_WIN32_FALSE NEED_COSSDUMP_TRUE NEED_COSSDUMP_FALSE REPL_POLICIES REPL_OBJS REPL_LIBS ENABLE_PINGER_TRUE ENABLE_PINGER_FALSE USE_DELAY_POOLS_TRUE USE_DELAY_POOLS_FALSE USE_SNMP_TRUE USE_SNMP_FALSE SNMPLIB makesnmplib ENABLE_HTCP_TRUE ENABLE_HTCP_FALSE ENABLE_SSL_TRUE ENABLE_SSL_FALSE NEED_OWN_MD5_TRUE NEED_OWN_MD5_FALSE SSLLIB ERR_DEFAULT_LANGUAGE ERR_LANGUAGES MAKE_LEAKFINDER_TRUE MAKE_LEAKFINDER_FALSE USE_DNSSERVER_TRUE USE_DNSSERVER_FALSE OPT_DEFAULT_HOSTS AUTH_MODULES AUTH_OBJS AUTH_LIBS BASIC_AUTH_HELPERS NTLM_AUTH_HELPERS DIGEST_AUTH_HELPERS NEGOTIATE_AUTH_HELPERS EXTERNAL_ACL_HELPERS CPP EGREP LIBSASL ENABLE_UNLINKD_TRUE ENABLE_UNLINKD_FALSE RANLIB ac_ct_RANLIB LN_S SH FALSE TRUE RM MV MKDIR LN PERL AR AR_R ALLOCA CRYPTLIB LIB_EPOLL LIB_LDAP LIB_LBER LIB_DB USE_POLL_TRUE USE_POLL_FALSE USE_EPOLL_TRUE USE_EPOLL_FALSE USE_SELECT_TRUE USE_SELECT_FALSE USE_SELECT_SIMPLE_TRUE USE_SELECT_SIMPLE_FALSE USE_SELECT_WIN32_TRUE USE_SELECT_WIN32_FALSE USE_KQUEUE_TRUE USE_KQUEUE_FALSE NEED_OWN_SNPRINTF_TRUE NEED_OWN_SNPRINTF_FALSE NEED_OWN_STRSEP_TRUE NEED_OWN_STRSEP_FALSE REGEXLIB LIBREGEX LIBOBJS XTRA_OBJS XTRA_LIBS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -781,7 +781,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Squid Web Proxy 2.6.STABLE4 to adapt to many kinds of systems. +\`configure' configures Squid Web Proxy 2.6.STABLE5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -847,7 +847,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Squid Web Proxy 2.6.STABLE4:";; + short | recursive ) echo "Configuration of Squid Web Proxy 2.6.STABLE5:";; esac cat <<\_ACEOF @@ -914,19 +914,22 @@ Select languages to be installed. (All will be installed by default) --enable-coss-aio-ops Enable COSS I/O with Posix AIO (default is aufs I/O) - --enable-select Enable select() support. - --disable-select Disable select() support. - --enable-poll Enable poll() instead of select(). Normally poll - is preferred over select, but configure knows poll - is broken on some platforms. If you think you are - smarter than the configure script, you may enable - poll with this option. - --disable-poll Disable the use of poll(). - --enable-epoll Enable epoll() instead of poll() or select(). - epoll() is best where available, but must be - explicitly set at the moment. - --disable-epoll Disable the use of epoll(). - --enable-kqueue Enable kqueue support. + --enable-select Force the use of select support. + Normally configure automatically selects a better + alternative if available. + --disable-select Disable select support, causing configure to fail + if a better alternative is not available + --enable-select-simple Force the use of select support (POSIX). + Useful if your system only supports the bare minium + POSIX select requirements without fds_bits. + --enable-poll Force the use of poll even if automatic checks + indicate poll may be broken on your plaform. + --disable-poll Disable the use of poll. + --enable-epoll Force the use of epoll even if automatic checks + indicate epoll may not be supported. + --disable-epoll Disable the use of epoll. + --enable-kqueue Force the use of kqueue even if automatic checks + indicate kqueue may not be supported. --disable-kqueue Disable kqueue support. --disable-http-violations This allows you to remove code which is known to @@ -1155,7 +1158,7 @@ test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF -Squid Web Proxy configure 2.6.STABLE4 +Squid Web Proxy configure 2.6.STABLE5 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. @@ -1169,7 +1172,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Squid Web Proxy $as_me 2.6.STABLE4, which was +It was created by Squid Web Proxy $as_me 2.6.STABLE5, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ @@ -1815,7 +1818,7 @@ # Define the identity of the package. PACKAGE='squid' - VERSION='2.6.STABLE4' + VERSION='2.6.STABLE5' cat >>confdefs.h <<_ACEOF @@ -4078,7 +4081,7 @@ #define SQUID_SNMP 1 _ACEOF - SNMPLIB='-L../snmplib -lsnmp' + SNMPLIB='../snmplib/libsnmp.a' if true; then @@ -4421,6 +4424,24 @@ fi; +# Check whether --enable-select-simple or --disable-select-simple was given. +if test "${enable_select_simple+set}" = set; then + enableval="$enable_select_simple" + + case "$enableval" in + yes) + echo "Forcing select() to be enabled in simple POSIX mode" + SELECT_TYPE="select_simple" + ac_cv_func_select='yes' + ;; + no) + echo "Forcing select() to be disabled" + ac_cv_func_select='no' + ;; + esac + +fi; + # Check whether --enable-poll or --disable-poll was given. if test "${enable_poll+set}" = set; then enableval="$enable_poll" @@ -4647,6 +4668,10 @@ _ACEOF LINUX_TPROXY="yes" + if test -z "$LINUX_NETFILTER"; then + echo "Linux-Netfilter Transparent Proxy automatically enabled" + LINUX_NETFILTER="yes" + fi fi fi; @@ -16254,116 +16279,6 @@ SELECT_TYPE="select" fi -case "$SELECT_TYPE" in -epoll) - -cat >>confdefs.h <<\_ACEOF -#define USE_EPOLL 1 -_ACEOF - - echo "$as_me:$LINENO: checking for epoll_create in -lepoll" >&5 -echo $ECHO_N "checking for epoll_create in -lepoll... $ECHO_C" >&6 -if test "${ac_cv_lib_epoll_epoll_create+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lepoll $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char epoll_create (); -int -main () -{ -epoll_create (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_epoll_epoll_create=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_epoll_epoll_create=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_epoll_epoll_create" >&5 -echo "${ECHO_T}$ac_cv_lib_epoll_epoll_create" >&6 -if test $ac_cv_lib_epoll_epoll_create = yes; then - EPOLL_LIBS="-lepoll" -fi - - - ;; -poll) - -cat >>confdefs.h <<\_ACEOF -#define USE_POLL 1 -_ACEOF - - ;; -select) - -cat >>confdefs.h <<\_ACEOF -#define USE_SELECT 1 -_ACEOF - - ;; -select_win32) - -cat >>confdefs.h <<\_ACEOF -#define USE_SELECT_WIN32 1 -_ACEOF - - ;; -kqueue) - -cat >>confdefs.h <<\_ACEOF -#define USE_KQUEUE 1 -_ACEOF - - ;; -*) - echo "ERROR: Unknown IO loop type '$SELECT_TYPE'" - exit 1 -esac - echo "Using ${SELECT_TYPE} for the IO loop." @@ -16397,6 +16312,16 @@ +if test $SELECT_TYPE = select_simple; then + USE_SELECT_SIMPLE_TRUE= + USE_SELECT_SIMPLE_FALSE='#' +else + USE_SELECT_SIMPLE_TRUE='#' + USE_SELECT_SIMPLE_FALSE= +fi + + + if test $SELECT_TYPE = select_win32; then USE_SELECT_WIN32_TRUE= USE_SELECT_WIN32_FALSE='#' @@ -16766,7 +16691,7 @@ echo "$as_me:$LINENO: checking if TPROXY header files are installed" >&5 echo $ECHO_N "checking if TPROXY header files are installed... $ECHO_C" >&6 # hold on to your hats... - if test "$ac_cv_header_linux_netfilter_ipv4_ip_tproxy_h" = "yes"; then + if test "$ac_cv_header_linux_netfilter_ipv4_ip_tproxy_h" = "yes" && test "$LINUX_NETFILTER" = "yes"; then LINUX_TPROXY="yes" cat >>confdefs.h <<\_ACEOF @@ -16784,7 +16709,7 @@ echo "$as_me:$LINENO: result: $LINUX_TPROXY" >&5 echo "${ECHO_T}$LINUX_TPROXY" >&6 fi -if test "$LINUX_TPROXY" = "no" ; then +if test "$LINUX_TPROXY" = "no" && test "$LINUX_NETFILTER" = "yes"; then echo "WARNING: Cannot find TPROXY headers, you need to install the" echo "tproxy package from:" echo " - lynx http://www.balabit.com/downloads/tproxy/" @@ -18141,6 +18066,13 @@ Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi +if test -z "${USE_SELECT_SIMPLE_TRUE}" && test -z "${USE_SELECT_SIMPLE_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"USE_SELECT_SIMPLE\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"USE_SELECT_SIMPLE\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi if test -z "${USE_SELECT_WIN32_TRUE}" && test -z "${USE_SELECT_WIN32_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"USE_SELECT_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." >&5 @@ -18454,7 +18386,7 @@ } >&5 cat >&5 <<_CSEOF -This file was extended by Squid Web Proxy $as_me 2.6.STABLE4, which was +This file was extended by Squid Web Proxy $as_me 2.6.STABLE5, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -18517,7 +18449,7 @@ cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -Squid Web Proxy config.status 2.6.STABLE4 +Squid Web Proxy config.status 2.6.STABLE5 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" @@ -18884,13 +18816,14 @@ s,@LIB_LDAP@,$LIB_LDAP,;t t s,@LIB_LBER@,$LIB_LBER,;t t s,@LIB_DB@,$LIB_DB,;t t -s,@EPOLL_LIBS@,$EPOLL_LIBS,;t t s,@USE_POLL_TRUE@,$USE_POLL_TRUE,;t t s,@USE_POLL_FALSE@,$USE_POLL_FALSE,;t t s,@USE_EPOLL_TRUE@,$USE_EPOLL_TRUE,;t t s,@USE_EPOLL_FALSE@,$USE_EPOLL_FALSE,;t t s,@USE_SELECT_TRUE@,$USE_SELECT_TRUE,;t t s,@USE_SELECT_FALSE@,$USE_SELECT_FALSE,;t t +s,@USE_SELECT_SIMPLE_TRUE@,$USE_SELECT_SIMPLE_TRUE,;t t +s,@USE_SELECT_SIMPLE_FALSE@,$USE_SELECT_SIMPLE_FALSE,;t t s,@USE_SELECT_WIN32_TRUE@,$USE_SELECT_WIN32_TRUE,;t t s,@USE_SELECT_WIN32_FALSE@,$USE_SELECT_WIN32_FALSE,;t t s,@USE_KQUEUE_TRUE@,$USE_KQUEUE_TRUE,;t t diff -ruN squid-2.6.STABLE4/configure.in squid-2.6.STABLE5/configure.in --- squid-2.6.STABLE4/configure.in Sat Sep 23 11:49:33 2006 +++ squid-2.6.STABLE5/configure.in Fri Nov 3 06:20:14 2006 @@ -1,16 +1,16 @@ dnl dnl Configuration input file for Squid dnl -dnl $Id: configure.in,v 1.402 2006/09/22 11:10:14 hno Exp $ +dnl $Id: configure.in,v 1.410 2006/11/03 13:16:21 hno Exp $ dnl dnl dnl -AC_INIT(Squid Web Proxy, 2.6.STABLE4, http://www.squid-cache.org/bugs/, squid) +AC_INIT(Squid Web Proxy, 2.6.STABLE5, http://www.squid-cache.org/bugs/, squid) AC_PREREQ(2.52) AM_CONFIG_HEADER(include/autoconf.h) AC_CONFIG_AUX_DIR(cfgaux) AM_INIT_AUTOMAKE -AC_REVISION($Revision: 1.402 $)dnl +AC_REVISION($Revision: 1.410 $)dnl AC_PREFIX_DEFAULT(/usr/local/squid) AM_MAINTAINER_MODE @@ -615,7 +615,7 @@ [ if test "$enableval" = "yes" ; then echo "SNMP monitoring enabled" AC_DEFINE(SQUID_SNMP, 1, [Define to enable SNMP monitoring of Squid]) - SNMPLIB='-L../snmplib -lsnmp' + SNMPLIB='../snmplib/libsnmp.a' AM_CONDITIONAL(USE_SNMP, true) SNMP_MAKEFILE=./snmplib/Makefile makesnmplib=snmplib @@ -828,8 +828,11 @@ dnl Enable select() AC_ARG_ENABLE(select, -[ --enable-select Enable select() support. - --disable-select Disable select() support. ], +[ --enable-select Force the use of select support. + Normally configure automatically selects a better + alternative if available. + --disable-select Disable select support, causing configure to fail + if a better alternative is not available], [ case "$enableval" in @@ -845,14 +848,30 @@ esac ]) +dnl Enable select() +AC_ARG_ENABLE(select-simple, +[ --enable-select-simple Force the use of select support (POSIX). + Useful if your system only supports the bare minium + POSIX select requirements without fds_bits.], +[ + case "$enableval" in + yes) + echo "Forcing select() to be enabled in simple POSIX mode" + SELECT_TYPE="select_simple" + ac_cv_func_select='yes' + ;; + no) + echo "Forcing select() to be disabled" + ac_cv_func_select='no' + ;; + esac +]) + dnl Enable poll() AC_ARG_ENABLE(poll, -[ --enable-poll Enable poll() instead of select(). Normally poll - is preferred over select, but configure knows poll - is broken on some platforms. If you think you are - smarter than the configure script, you may enable - poll with this option. - --disable-poll Disable the use of poll().], +[ --enable-poll Force the use of poll even if automatic checks + indicate poll may be broken on your plaform. + --disable-poll Disable the use of poll.], [ case "$enableval" in yes) @@ -869,10 +888,9 @@ dnl Enable epoll() AC_ARG_ENABLE(epoll, -[ --enable-epoll Enable epoll() instead of poll() or select(). - epoll() is best where available, but must be - explicitly set at the moment. - --disable-epoll Disable the use of epoll().], +[ --enable-epoll Force the use of epoll even if automatic checks + indicate epoll may not be supported. + --disable-epoll Disable the use of epoll.], [ case "$enableval" in yes) @@ -889,7 +907,8 @@ dnl Enable kqueue AC_ARG_ENABLE(kqueue, -[ --enable-kqueue Enable kqueue support. +[ --enable-kqueue Force the use of kqueue even if automatic checks + indicate kqueue may not be supported. --disable-kqueue Disable kqueue support. ], [ @@ -1081,6 +1100,10 @@ echo "Linux Netfilter/TPROXY enabled" AC_DEFINE(LINUX_TPROXY, 1, [Enable real Transparent Proxy support for Netfilter TPROXY.]) LINUX_TPROXY="yes" + if test -z "$LINUX_NETFILTER"; then + echo "Linux-Netfilter Transparent Proxy automatically enabled" + LINUX_NETFILTER="yes" + fi fi ]) @@ -2392,33 +2415,11 @@ SELECT_TYPE="select" fi -case "$SELECT_TYPE" in -epoll) - AC_DEFINE(USE_EPOLL,1,[Use epoll() for the IO loop]) - AC_CHECK_LIB(epoll, epoll_create, [EPOLL_LIBS="-lepoll"]) - AC_SUBST(EPOLL_LIBS) - ;; -poll) - AC_DEFINE(USE_POLL,1,[Use poll() for the IO loop]) - ;; -select) - AC_DEFINE(USE_SELECT,1,[Use select() for the IO loop]) - ;; -select_win32) - AC_DEFINE(USE_SELECT_WIN32,1,[Use Winsock select() for the IO loop]) - ;; -kqueue) - AC_DEFINE(USE_KQUEUE,1,[Use kqueue() for the IO loop]) - ;; -*) - echo "ERROR: Unknown IO loop type '$SELECT_TYPE'" - exit 1 -esac - echo "Using ${SELECT_TYPE} for the IO loop." AM_CONDITIONAL([USE_POLL], [test $SELECT_TYPE = poll]) AM_CONDITIONAL([USE_EPOLL], [test $SELECT_TYPE = epoll]) AM_CONDITIONAL([USE_SELECT], [test $SELECT_TYPE = select]) +AM_CONDITIONAL([USE_SELECT_SIMPLE], [test $SELECT_TYPE = select_simple]) AM_CONDITIONAL([USE_SELECT_WIN32], [test $SELECT_TYPE = select_win32]) AM_CONDITIONAL([USE_KQUEUE], [test $SELECT_TYPE = kqueue]) @@ -2587,7 +2588,7 @@ if test "$LINUX_TPROXY" ; then AC_MSG_CHECKING(if TPROXY header files are installed) # hold on to your hats... - if test "$ac_cv_header_linux_netfilter_ipv4_ip_tproxy_h" = "yes"; then + if test "$ac_cv_header_linux_netfilter_ipv4_ip_tproxy_h" = "yes" && test "$LINUX_NETFILTER" = "yes"; then LINUX_TPROXY="yes" AC_DEFINE(LINUX_TPROXY, 1, [Enable real Transparent Proxy support for Netfilter TPROXY.]) else @@ -2596,7 +2597,7 @@ fi AC_MSG_RESULT($LINUX_TPROXY) fi -if test "$LINUX_TPROXY" = "no" ; then +if test "$LINUX_TPROXY" = "no" && test "$LINUX_NETFILTER" = "yes"; then echo "WARNING: Cannot find TPROXY headers, you need to install the" echo "tproxy package from:" echo " - lynx http://www.balabit.com/downloads/tproxy/" diff -ruN squid-2.6.STABLE4/contrib/Makefile.in squid-2.6.STABLE5/contrib/Makefile.in --- squid-2.6.STABLE4/contrib/Makefile.in Fri Sep 22 03:09:34 2006 +++ squid-2.6.STABLE5/contrib/Makefile.in Sun Oct 29 19:21:10 2006 @@ -97,7 +97,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -181,6 +180,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/doc/Makefile.in squid-2.6.STABLE5/doc/Makefile.in --- squid-2.6.STABLE4/doc/Makefile.in Fri Sep 22 03:09:36 2006 +++ squid-2.6.STABLE5/doc/Makefile.in Sun Oct 29 19:21:11 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.29 2006/09/22 09:09:36 hno Exp $ +# $Id: Makefile.in,v 1.31 2006/10/30 02:21:11 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -104,7 +104,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -188,6 +187,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/errors/Makefile.in squid-2.6.STABLE5/errors/Makefile.in --- squid-2.6.STABLE4/errors/Makefile.in Fri Sep 22 03:09:37 2006 +++ squid-2.6.STABLE5/errors/Makefile.in Sun Oct 29 19:21:13 2006 @@ -15,7 +15,7 @@ @SET_MAKE@ # -# $Id: Makefile.in,v 1.45 2006/09/22 09:09:37 hno Exp $ +# $Id: Makefile.in,v 1.47 2006/10/30 02:21:13 hno Exp $ # srcdir = @srcdir@ top_srcdir = @top_srcdir@ @@ -96,7 +96,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -180,6 +179,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/Makefile.in squid-2.6.STABLE5/helpers/Makefile.in --- squid-2.6.STABLE4/helpers/Makefile.in Fri Sep 22 03:09:38 2006 +++ squid-2.6.STABLE5/helpers/Makefile.in Sun Oct 29 19:21:14 2006 @@ -101,7 +101,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -185,6 +184,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/basic_auth/LDAP/Makefile.in squid-2.6.STABLE5/helpers/basic_auth/LDAP/Makefile.in --- squid-2.6.STABLE4/helpers/basic_auth/LDAP/Makefile.in Fri Sep 22 03:09:39 2006 +++ squid-2.6.STABLE5/helpers/basic_auth/LDAP/Makefile.in Sun Oct 29 19:21:16 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid LDAP authentication helper # -# $Id: Makefile.in,v 1.37 2006/09/22 09:09:39 hno Exp $ +# $Id: Makefile.in,v 1.39 2006/10/30 02:21:16 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -123,7 +123,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -207,6 +206,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/basic_auth/MSNT/Makefile.in squid-2.6.STABLE5/helpers/basic_auth/MSNT/Makefile.in --- squid-2.6.STABLE4/helpers/basic_auth/MSNT/Makefile.in Fri Sep 22 03:09:39 2006 +++ squid-2.6.STABLE5/helpers/basic_auth/MSNT/Makefile.in Sun Oct 29 19:21:17 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.40 2006/09/22 09:09:39 hno Exp $ +# $Id: Makefile.in,v 1.42 2006/10/30 02:21:17 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -132,7 +132,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -216,6 +215,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/basic_auth/Makefile.in squid-2.6.STABLE5/helpers/basic_auth/Makefile.in --- squid-2.6.STABLE4/helpers/basic_auth/Makefile.in Fri Sep 22 03:09:39 2006 +++ squid-2.6.STABLE5/helpers/basic_auth/Makefile.in Sun Oct 29 19:21:15 2006 @@ -16,7 +16,7 @@ # Makefile for storage modules in the Squid Object Cache server # -# $Id: Makefile.in,v 1.36 2006/09/22 09:09:39 hno Exp $ +# $Id: Makefile.in,v 1.38 2006/10/30 02:21:15 hno Exp $ # srcdir = @srcdir@ top_srcdir = @top_srcdir@ @@ -105,7 +105,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -189,6 +188,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/basic_auth/NCSA/Makefile.in squid-2.6.STABLE5/helpers/basic_auth/NCSA/Makefile.in --- squid-2.6.STABLE4/helpers/basic_auth/NCSA/Makefile.in Fri Sep 22 03:09:40 2006 +++ squid-2.6.STABLE5/helpers/basic_auth/NCSA/Makefile.in Sun Oct 29 19:21:17 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.37 2006/09/22 09:09:40 hno Exp $ +# $Id: Makefile.in,v 1.39 2006/10/30 02:21:17 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -123,7 +123,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -207,6 +206,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/basic_auth/NCSA/ncsa_auth.c squid-2.6.STABLE5/helpers/basic_auth/NCSA/ncsa_auth.c --- squid-2.6.STABLE4/helpers/basic_auth/NCSA/ncsa_auth.c Thu Sep 21 20:18:00 2006 +++ squid-2.6.STABLE5/helpers/basic_auth/NCSA/ncsa_auth.c Sat Sep 30 15:25:01 2006 @@ -73,6 +73,7 @@ char *passwd; if (hash != NULL) { hashFreeItems(hash, my_free); + hashFreeMemory(hash); } /* initial setup */ hash = hash_create((HASHCMP *) strcmp, 7921, hash_string); @@ -149,6 +150,10 @@ } else { printf("ERR Wrong password\n"); } + } + if (hash != NULL) { + hashFreeItems(hash, my_free); + hashFreeMemory(hash); } exit(0); } diff -ruN squid-2.6.STABLE4/helpers/basic_auth/PAM/Makefile.in squid-2.6.STABLE5/helpers/basic_auth/PAM/Makefile.in --- squid-2.6.STABLE4/helpers/basic_auth/PAM/Makefile.in Fri Sep 22 03:09:40 2006 +++ squid-2.6.STABLE5/helpers/basic_auth/PAM/Makefile.in Sun Oct 29 19:21:18 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid PAM authentication helper # -# $Id: Makefile.in,v 1.36 2006/09/22 09:09:40 hno Exp $ +# $Id: Makefile.in,v 1.38 2006/10/30 02:21:18 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -122,7 +122,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -206,6 +205,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/basic_auth/SASL/Makefile.in squid-2.6.STABLE5/helpers/basic_auth/SASL/Makefile.in --- squid-2.6.STABLE4/helpers/basic_auth/SASL/Makefile.in Fri Sep 22 03:09:40 2006 +++ squid-2.6.STABLE5/helpers/basic_auth/SASL/Makefile.in Sun Oct 29 19:21:19 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid SASL authentication helper # -# $Id: Makefile.in,v 1.33 2006/09/22 09:09:40 hno Exp $ +# $Id: Makefile.in,v 1.35 2006/10/30 02:21:19 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -119,7 +119,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -203,6 +202,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/basic_auth/SMB/Makefile.in squid-2.6.STABLE5/helpers/basic_auth/SMB/Makefile.in --- squid-2.6.STABLE4/helpers/basic_auth/SMB/Makefile.in Fri Sep 22 03:09:41 2006 +++ squid-2.6.STABLE5/helpers/basic_auth/SMB/Makefile.in Sun Oct 29 19:21:19 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.36 2006/09/22 09:09:41 hno Exp $ +# $Id: Makefile.in,v 1.38 2006/10/30 02:21:19 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -128,7 +128,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -212,6 +211,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/basic_auth/YP/Makefile.in squid-2.6.STABLE5/helpers/basic_auth/YP/Makefile.in --- squid-2.6.STABLE4/helpers/basic_auth/YP/Makefile.in Fri Sep 22 03:09:41 2006 +++ squid-2.6.STABLE5/helpers/basic_auth/YP/Makefile.in Sun Oct 29 19:21:20 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.37 2006/09/22 09:09:41 hno Exp $ +# $Id: Makefile.in,v 1.39 2006/10/30 02:21:20 hno Exp $ # # @@ -118,7 +118,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -202,6 +201,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/basic_auth/getpwnam/Makefile.in squid-2.6.STABLE5/helpers/basic_auth/getpwnam/Makefile.in --- squid-2.6.STABLE4/helpers/basic_auth/getpwnam/Makefile.in Fri Sep 22 03:09:41 2006 +++ squid-2.6.STABLE5/helpers/basic_auth/getpwnam/Makefile.in Sun Oct 29 19:21:20 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.35 2006/09/22 09:09:41 hno Exp $ +# $Id: Makefile.in,v 1.37 2006/10/30 02:21:20 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -120,7 +120,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -204,6 +203,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/basic_auth/mswin_sspi/Makefile.in squid-2.6.STABLE5/helpers/basic_auth/mswin_sspi/Makefile.in --- squid-2.6.STABLE4/helpers/basic_auth/mswin_sspi/Makefile.in Fri Sep 22 03:09:41 2006 +++ squid-2.6.STABLE5/helpers/basic_auth/mswin_sspi/Makefile.in Sun Oct 29 19:21:22 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.9 2006/09/22 09:09:41 hno Exp $ +# $Id: Makefile.in,v 1.11 2006/10/30 02:21:22 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -119,7 +119,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -203,6 +202,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/basic_auth/multi-domain-NTLM/Makefile.in squid-2.6.STABLE5/helpers/basic_auth/multi-domain-NTLM/Makefile.in --- squid-2.6.STABLE4/helpers/basic_auth/multi-domain-NTLM/Makefile.in Fri Sep 22 03:09:42 2006 +++ squid-2.6.STABLE5/helpers/basic_auth/multi-domain-NTLM/Makefile.in Sun Oct 29 19:21:22 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.33 2006/09/22 09:09:42 hno Exp $ +# $Id: Makefile.in,v 1.35 2006/10/30 02:21:22 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -104,7 +104,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -188,6 +187,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/digest_auth/Makefile.in squid-2.6.STABLE5/helpers/digest_auth/Makefile.in --- squid-2.6.STABLE4/helpers/digest_auth/Makefile.in Fri Sep 22 03:09:42 2006 +++ squid-2.6.STABLE5/helpers/digest_auth/Makefile.in Sun Oct 29 19:21:22 2006 @@ -16,7 +16,7 @@ # Makefile for digest auth helpers in the Squid Object Cache server # -# $Id: Makefile.in,v 1.33 2006/09/22 09:09:42 hno Exp $ +# $Id: Makefile.in,v 1.35 2006/10/30 02:21:22 hno Exp $ # srcdir = @srcdir@ top_srcdir = @top_srcdir@ @@ -105,7 +105,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -189,6 +188,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/digest_auth/ldap/Makefile.in squid-2.6.STABLE5/helpers/digest_auth/ldap/Makefile.in --- squid-2.6.STABLE4/helpers/digest_auth/ldap/Makefile.in Fri Sep 22 03:09:43 2006 +++ squid-2.6.STABLE5/helpers/digest_auth/ldap/Makefile.in Sun Oct 29 19:21:22 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.14 2006/09/22 09:09:43 hno Exp $ +# $Id: Makefile.in,v 1.16 2006/10/30 02:21:22 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -122,7 +122,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -206,6 +205,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/digest_auth/password/Makefile.in squid-2.6.STABLE5/helpers/digest_auth/password/Makefile.in --- squid-2.6.STABLE4/helpers/digest_auth/password/Makefile.in Fri Sep 22 03:09:43 2006 +++ squid-2.6.STABLE5/helpers/digest_auth/password/Makefile.in Sun Oct 29 19:21:23 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.35 2006/09/22 09:09:43 hno Exp $ +# $Id: Makefile.in,v 1.37 2006/10/30 02:21:23 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -121,7 +121,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -205,6 +204,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/external_acl/Makefile.in squid-2.6.STABLE5/helpers/external_acl/Makefile.in --- squid-2.6.STABLE4/helpers/external_acl/Makefile.in Fri Sep 22 03:09:43 2006 +++ squid-2.6.STABLE5/helpers/external_acl/Makefile.in Sun Oct 29 19:21:23 2006 @@ -16,7 +16,7 @@ # Makefile for storage modules in the Squid Object Cache server # -# $Id: Makefile.in,v 1.23 2006/09/22 09:09:43 hno Exp $ +# $Id: Makefile.in,v 1.25 2006/10/30 02:21:23 hno Exp $ # srcdir = @srcdir@ top_srcdir = @top_srcdir@ @@ -105,7 +105,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -189,6 +188,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/external_acl/ip_user/Makefile.in squid-2.6.STABLE5/helpers/external_acl/ip_user/Makefile.in --- squid-2.6.STABLE4/helpers/external_acl/ip_user/Makefile.in Fri Sep 22 03:09:43 2006 +++ squid-2.6.STABLE5/helpers/external_acl/ip_user/Makefile.in Sun Oct 29 19:21:24 2006 @@ -17,7 +17,7 @@ # # Makefile for the ip_user external_acl helper by Rodrigo Campos # -# $Id: Makefile.in,v 1.22 2006/09/22 09:09:43 hno Exp $ +# $Id: Makefile.in,v 1.24 2006/10/30 02:21:24 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -119,7 +119,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -203,6 +202,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/external_acl/ldap_group/Makefile.in squid-2.6.STABLE5/helpers/external_acl/ldap_group/Makefile.in --- squid-2.6.STABLE4/helpers/external_acl/ldap_group/Makefile.in Fri Sep 22 03:09:44 2006 +++ squid-2.6.STABLE5/helpers/external_acl/ldap_group/Makefile.in Sun Oct 29 19:21:24 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid LDAP authentication helper # -# $Id: Makefile.in,v 1.23 2006/09/22 09:09:44 hno Exp $ +# $Id: Makefile.in,v 1.25 2006/10/30 02:21:24 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -124,7 +124,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -208,6 +207,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/external_acl/mswin_lm_group/Makefile.in squid-2.6.STABLE5/helpers/external_acl/mswin_lm_group/Makefile.in --- squid-2.6.STABLE4/helpers/external_acl/mswin_lm_group/Makefile.in Fri Sep 22 03:09:44 2006 +++ squid-2.6.STABLE5/helpers/external_acl/mswin_lm_group/Makefile.in Sun Oct 29 19:21:25 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.8 2006/09/22 09:09:44 hno Exp $ +# $Id: Makefile.in,v 1.10 2006/10/30 02:21:25 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -119,7 +119,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -203,6 +202,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/external_acl/session/Makefile.in squid-2.6.STABLE5/helpers/external_acl/session/Makefile.in --- squid-2.6.STABLE4/helpers/external_acl/session/Makefile.in Fri Sep 22 03:09:44 2006 +++ squid-2.6.STABLE5/helpers/external_acl/session/Makefile.in Sun Oct 29 19:21:26 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid LDAP authentication helper # -# $Id: Makefile.in,v 1.9 2006/09/22 09:09:44 hno Exp $ +# $Id: Makefile.in,v 1.11 2006/10/30 02:21:26 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -122,7 +122,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -206,6 +205,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/external_acl/unix_group/Makefile.in squid-2.6.STABLE5/helpers/external_acl/unix_group/Makefile.in --- squid-2.6.STABLE4/helpers/external_acl/unix_group/Makefile.in Fri Sep 22 03:09:44 2006 +++ squid-2.6.STABLE5/helpers/external_acl/unix_group/Makefile.in Sun Oct 29 19:21:27 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid LDAP authentication helper # -# $Id: Makefile.in,v 1.22 2006/09/22 09:09:44 hno Exp $ +# $Id: Makefile.in,v 1.24 2006/10/30 02:21:27 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -121,7 +121,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -205,6 +204,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/external_acl/wbinfo_group/Makefile.in squid-2.6.STABLE5/helpers/external_acl/wbinfo_group/Makefile.in --- squid-2.6.STABLE4/helpers/external_acl/wbinfo_group/Makefile.in Fri Sep 22 03:09:44 2006 +++ squid-2.6.STABLE5/helpers/external_acl/wbinfo_group/Makefile.in Sun Oct 29 19:21:28 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid LDAP authentication helper # -# $Id: Makefile.in,v 1.21 2006/09/22 09:09:44 hno Exp $ +# $Id: Makefile.in,v 1.23 2006/10/30 02:21:28 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -104,7 +104,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -188,6 +187,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/negotiate_auth/Makefile.in squid-2.6.STABLE5/helpers/negotiate_auth/Makefile.in --- squid-2.6.STABLE4/helpers/negotiate_auth/Makefile.in Fri Sep 22 03:09:45 2006 +++ squid-2.6.STABLE5/helpers/negotiate_auth/Makefile.in Sun Oct 29 19:21:28 2006 @@ -16,7 +16,7 @@ # Makefile for storage modules in the Squid Object Cache server # -# $Id: Makefile.in,v 1.10 2006/09/22 09:09:45 hno Exp $ +# $Id: Makefile.in,v 1.12 2006/10/30 02:21:28 hno Exp $ # srcdir = @srcdir@ top_srcdir = @top_srcdir@ @@ -105,7 +105,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -189,6 +188,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/negotiate_auth/mswin_sspi/Makefile.in squid-2.6.STABLE5/helpers/negotiate_auth/mswin_sspi/Makefile.in --- squid-2.6.STABLE4/helpers/negotiate_auth/mswin_sspi/Makefile.in Fri Sep 22 03:09:45 2006 +++ squid-2.6.STABLE5/helpers/negotiate_auth/mswin_sspi/Makefile.in Sun Oct 29 19:21:29 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.8 2006/09/22 09:09:45 hno Exp $ +# $Id: Makefile.in,v 1.10 2006/10/30 02:21:29 hno Exp $ # srcdir = @srcdir@ @@ -118,7 +118,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -202,6 +201,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/ntlm_auth/Makefile.in squid-2.6.STABLE5/helpers/ntlm_auth/Makefile.in --- squid-2.6.STABLE4/helpers/ntlm_auth/Makefile.in Fri Sep 22 03:09:46 2006 +++ squid-2.6.STABLE5/helpers/ntlm_auth/Makefile.in Sun Oct 29 19:21:30 2006 @@ -16,7 +16,7 @@ # Makefile for storage modules in the Squid Object Cache server # -# $Id: Makefile.in,v 1.36 2006/09/22 09:09:46 hno Exp $ +# $Id: Makefile.in,v 1.38 2006/10/30 02:21:30 hno Exp $ # srcdir = @srcdir@ top_srcdir = @top_srcdir@ @@ -105,7 +105,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -189,6 +188,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/ntlm_auth/SMB/Makefile.in squid-2.6.STABLE5/helpers/ntlm_auth/SMB/Makefile.in --- squid-2.6.STABLE4/helpers/ntlm_auth/SMB/Makefile.in Fri Sep 22 03:09:46 2006 +++ squid-2.6.STABLE5/helpers/ntlm_auth/SMB/Makefile.in Sun Oct 29 19:21:30 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.35 2006/09/22 09:09:46 hno Exp $ +# $Id: Makefile.in,v 1.37 2006/10/30 02:21:30 hno Exp $ # srcdir = @srcdir@ @@ -125,7 +125,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -209,6 +208,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/ntlm_auth/SMB/smbval/Makefile.in squid-2.6.STABLE5/helpers/ntlm_auth/SMB/smbval/Makefile.in --- squid-2.6.STABLE4/helpers/ntlm_auth/SMB/smbval/Makefile.in Fri Sep 22 03:09:46 2006 +++ squid-2.6.STABLE5/helpers/ntlm_auth/SMB/smbval/Makefile.in Sun Oct 29 19:21:30 2006 @@ -113,7 +113,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -197,6 +196,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/ntlm_auth/fakeauth/Makefile.in squid-2.6.STABLE5/helpers/ntlm_auth/fakeauth/Makefile.in --- squid-2.6.STABLE4/helpers/ntlm_auth/fakeauth/Makefile.in Fri Sep 22 03:09:47 2006 +++ squid-2.6.STABLE5/helpers/ntlm_auth/fakeauth/Makefile.in Sun Oct 29 19:21:31 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.34 2006/09/22 09:09:47 hno Exp $ +# $Id: Makefile.in,v 1.36 2006/10/30 02:21:31 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -120,7 +120,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -204,6 +203,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/ntlm_auth/mswin_sspi/Makefile.in squid-2.6.STABLE5/helpers/ntlm_auth/mswin_sspi/Makefile.in --- squid-2.6.STABLE4/helpers/ntlm_auth/mswin_sspi/Makefile.in Fri Sep 22 03:09:47 2006 +++ squid-2.6.STABLE5/helpers/ntlm_auth/mswin_sspi/Makefile.in Sun Oct 29 19:21:31 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.8 2006/09/22 09:09:47 hno Exp $ +# $Id: Makefile.in,v 1.10 2006/10/30 02:21:31 hno Exp $ # srcdir = @srcdir@ @@ -117,7 +117,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -201,6 +200,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/helpers/ntlm_auth/no_check/Makefile.in squid-2.6.STABLE5/helpers/ntlm_auth/no_check/Makefile.in --- squid-2.6.STABLE4/helpers/ntlm_auth/no_check/Makefile.in Fri Sep 22 03:09:47 2006 +++ squid-2.6.STABLE5/helpers/ntlm_auth/no_check/Makefile.in Sun Oct 29 19:21:31 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.36 2006/09/22 09:09:47 hno Exp $ +# $Id: Makefile.in,v 1.38 2006/10/30 02:21:31 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -104,7 +104,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -188,6 +187,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/icons/Makefile.in squid-2.6.STABLE5/icons/Makefile.in --- squid-2.6.STABLE4/icons/Makefile.in Fri Sep 22 03:09:47 2006 +++ squid-2.6.STABLE5/icons/Makefile.in Sun Oct 29 19:21:32 2006 @@ -14,7 +14,7 @@ @SET_MAKE@ -# $Id: Makefile.in,v 1.46 2006/09/22 09:09:47 hno Exp $ +# $Id: Makefile.in,v 1.48 2006/10/30 02:21:32 hno Exp $ # srcdir = @srcdir@ @@ -105,7 +105,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -189,6 +188,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/include/autoconf.h.in squid-2.6.STABLE5/include/autoconf.h.in --- squid-2.6.STABLE4/include/autoconf.h.in Sat Sep 16 14:30:43 2006 +++ squid-2.6.STABLE5/include/autoconf.h.in Sun Oct 29 19:21:33 2006 @@ -772,9 +772,6 @@ dnsserver processes instead. */ #undef USE_DNSSERVERS -/* Use epoll() for the IO loop */ -#undef USE_EPOLL - /* Define if we should use GNU regex */ #undef USE_GNUREGEX @@ -792,9 +789,6 @@ /* Compile in support for Ident (RFC 931) lookups? Enabled by default. */ #undef USE_IDENT -/* Use kqueue() for the IO loop */ -#undef USE_KQUEUE - /* Enable code for assiting in finding memory leaks. Hacker stuff only. */ #undef USE_LEAKFINDER @@ -803,18 +797,9 @@ (USE_SSL) */ #undef USE_OPENSSL -/* Use poll() for the IO loop */ -#undef USE_POLL - /* If you want to log Referer request header values, define this. By default, they are written to referer.log in the Squid log directory. */ #undef USE_REFERER_LOG - -/* Use select() for the IO loop */ -#undef USE_SELECT - -/* Use Winsock select() for the IO loop */ -#undef USE_SELECT_WIN32 /* Define this to include code for SSL encryption. */ #undef USE_SSL diff -ruN squid-2.6.STABLE4/include/version.h squid-2.6.STABLE5/include/version.h --- squid-2.6.STABLE4/include/version.h Sat Sep 23 11:49:33 2006 +++ squid-2.6.STABLE5/include/version.h Fri Nov 3 06:20:14 2006 @@ -9,5 +9,5 @@ */ #ifndef SQUID_RELEASE_TIME -#define SQUID_RELEASE_TIME 1159033770 +#define SQUID_RELEASE_TIME 1162560011 #endif diff -ruN squid-2.6.STABLE4/lib/Makefile.in squid-2.6.STABLE5/lib/Makefile.in --- squid-2.6.STABLE4/lib/Makefile.in Fri Sep 22 03:09:48 2006 +++ squid-2.6.STABLE5/lib/Makefile.in Sun Oct 29 19:21:33 2006 @@ -15,7 +15,7 @@ @SET_MAKE@ # -# $Id: Makefile.in,v 1.85 2006/09/22 09:09:48 hno Exp $ +# $Id: Makefile.in,v 1.87 2006/10/30 02:21:33 hno Exp $ # srcdir = @srcdir@ @@ -150,7 +150,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -234,6 +233,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/scripts/Makefile.in squid-2.6.STABLE5/scripts/Makefile.in --- squid-2.6.STABLE4/scripts/Makefile.in Fri Sep 22 03:09:48 2006 +++ squid-2.6.STABLE5/scripts/Makefile.in Sun Oct 29 19:21:33 2006 @@ -102,7 +102,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -186,6 +185,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/snmplib/Makefile.in squid-2.6.STABLE5/snmplib/Makefile.in --- squid-2.6.STABLE4/snmplib/Makefile.in Fri Sep 22 03:09:48 2006 +++ squid-2.6.STABLE5/snmplib/Makefile.in Sun Oct 29 19:21:33 2006 @@ -111,7 +111,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -195,6 +194,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/src/Makefile.am squid-2.6.STABLE5/src/Makefile.am --- squid-2.6.STABLE4/src/Makefile.am Fri Sep 8 13:41:24 2006 +++ squid-2.6.STABLE5/src/Makefile.am Sun Oct 29 17:07:33 2006 @@ -1,7 +1,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.am,v 1.55 2006/09/08 19:41:24 serassio Exp $ +# $Id: Makefile.am,v 1.56 2006/10/30 00:07:33 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -79,6 +79,9 @@ if USE_SELECT COMMLOOP_SOURCE = comm_select.c endif +if USE_SELECT_SIMPLE +COMMLOOP_SOURCE = comm_select_simple.c +endif if USE_SELECT_WIN32 COMMLOOP_SOURCE = comm_select_win32.c endif @@ -127,6 +130,7 @@ comm_poll.c \ comm_select.c \ comm_select_win32.c \ + comm_select_simple.c \ comm_kqueue.c \ comm_generic.c \ ipc.c \ diff -ruN squid-2.6.STABLE4/src/Makefile.in squid-2.6.STABLE5/src/Makefile.in --- squid-2.6.STABLE4/src/Makefile.in Fri Sep 22 03:09:48 2006 +++ squid-2.6.STABLE5/src/Makefile.in Sun Oct 29 19:21:34 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.278 2006/09/22 09:09:48 hno Exp $ +# $Id: Makefile.in,v 1.280 2006/10/30 02:21:34 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -84,27 +84,28 @@ am__squid_SOURCES_DIST = access_log.c acl.c asn.c authenticate.c \ cache_cf.c CacheDigest.c cache_manager.c carp.c cbdata.c \ client_db.c client_side.c comm.c comm_epoll.c comm_kqueue.c \ - comm_poll.c comm_select.c comm_select_win32.c debug.c \ - defines.h delay_pools.c disk.c dns_internal.c dns.c enums.h \ - errorpage.c event.c errormap.c external_acl.c fd.c filemap.c \ - forward.c fqdncache.c ftp.c globals.h gopher.c helper.c htcp.c \ - http.c HttpStatusLine.c HttpHdrCc.c HttpHdrRange.c \ - HttpHdrContRange.c HttpHeader.c HttpHeaderTools.c HttpBody.c \ - HttpMsg.c HttpReply.c HttpRequest.c icmp.c icp_v2.c icp_v3.c \ - ident.c internal.c ipc.c ipc_win32.c ipcache.c leakfinder.c \ - locrewrite.c logfile.c main.c mem.c MemPool.c MemBuf.c mime.c \ - multicast.c neighbors.c net_db.c Packer.c pconn.c \ - peer_digest.c peer_monitor.c peer_select.c peer_sourcehash.c \ - peer_userhash.c protos.h redirect.c referer.c refresh.c \ - send-announce.c snmp_core.c snmp_agent.c squid.h ssl.c \ - ssl_support.c stat.c StatHist.c String.c stmem.c store.c \ - store_io.c store_client.c store_digest.c store_dir.c \ - store_key_md5.c store_log.c store_rebuild.c store_swapin.c \ - store_swapmeta.c store_swapout.c structs.h tools.c typedefs.h \ - unlinkd.c url.c urn.c useragent.c wais.c wccp.c wccp2.c \ - whois.c win32.c -@USE_EPOLL_FALSE@@USE_KQUEUE_FALSE@@USE_POLL_FALSE@@USE_SELECT_FALSE@@USE_SELECT_WIN32_TRUE@am__objects_1 = comm_select_win32.$(OBJEXT) -@USE_EPOLL_FALSE@@USE_KQUEUE_FALSE@@USE_POLL_FALSE@@USE_SELECT_TRUE@am__objects_1 = comm_select.$(OBJEXT) + comm_poll.c comm_select_simple.c comm_select.c \ + comm_select_win32.c debug.c defines.h delay_pools.c disk.c \ + dns_internal.c dns.c enums.h errorpage.c event.c errormap.c \ + external_acl.c fd.c filemap.c forward.c fqdncache.c ftp.c \ + globals.h gopher.c helper.c htcp.c http.c HttpStatusLine.c \ + HttpHdrCc.c HttpHdrRange.c HttpHdrContRange.c HttpHeader.c \ + HttpHeaderTools.c HttpBody.c HttpMsg.c HttpReply.c \ + HttpRequest.c icmp.c icp_v2.c icp_v3.c ident.c internal.c \ + ipc.c ipc_win32.c ipcache.c leakfinder.c locrewrite.c \ + logfile.c main.c mem.c MemPool.c MemBuf.c mime.c multicast.c \ + neighbors.c net_db.c Packer.c pconn.c peer_digest.c \ + peer_monitor.c peer_select.c peer_sourcehash.c peer_userhash.c \ + protos.h redirect.c referer.c refresh.c send-announce.c \ + snmp_core.c snmp_agent.c squid.h ssl.c ssl_support.c stat.c \ + StatHist.c String.c stmem.c store.c store_io.c store_client.c \ + store_digest.c store_dir.c store_key_md5.c store_log.c \ + store_rebuild.c store_swapin.c store_swapmeta.c \ + store_swapout.c structs.h tools.c typedefs.h unlinkd.c url.c \ + urn.c useragent.c wais.c wccp.c wccp2.c whois.c win32.c +@USE_EPOLL_FALSE@@USE_KQUEUE_FALSE@@USE_POLL_FALSE@@USE_SELECT_FALSE@@USE_SELECT_SIMPLE_FALSE@@USE_SELECT_WIN32_TRUE@am__objects_1 = comm_select_win32.$(OBJEXT) +@USE_EPOLL_FALSE@@USE_KQUEUE_FALSE@@USE_POLL_FALSE@@USE_SELECT_SIMPLE_FALSE@@USE_SELECT_TRUE@am__objects_1 = comm_select.$(OBJEXT) +@USE_EPOLL_FALSE@@USE_KQUEUE_FALSE@@USE_POLL_FALSE@@USE_SELECT_SIMPLE_TRUE@am__objects_1 = comm_select_simple.$(OBJEXT) @USE_EPOLL_FALSE@@USE_KQUEUE_FALSE@@USE_POLL_TRUE@am__objects_1 = comm_poll.$(OBJEXT) @USE_EPOLL_FALSE@@USE_KQUEUE_TRUE@am__objects_1 = \ @USE_EPOLL_FALSE@@USE_KQUEUE_TRUE@ comm_kqueue.$(OBJEXT) @@ -242,7 +243,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -326,6 +326,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ @@ -402,6 +404,7 @@ @USE_EPOLL_TRUE@COMMLOOP_SOURCE = comm_epoll.c @USE_KQUEUE_TRUE@COMMLOOP_SOURCE = comm_kqueue.c @USE_POLL_TRUE@COMMLOOP_SOURCE = comm_poll.c +@USE_SELECT_SIMPLE_TRUE@COMMLOOP_SOURCE = comm_select_simple.c @USE_SELECT_TRUE@COMMLOOP_SOURCE = comm_select.c @USE_SELECT_WIN32_TRUE@COMMLOOP_SOURCE = comm_select_win32.c SUBDIRS = fs repl auth @@ -425,6 +428,7 @@ comm_poll.c \ comm_select.c \ comm_select_win32.c \ + comm_select_simple.c \ comm_kqueue.c \ comm_generic.c \ ipc.c \ @@ -765,6 +769,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comm_kqueue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comm_poll.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comm_select.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comm_select_simple.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comm_select_win32.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/delay_pools.Po@am__quote@ diff -ruN squid-2.6.STABLE4/src/access_log.c squid-2.6.STABLE5/src/access_log.c --- squid-2.6.STABLE4/src/access_log.c Sat Sep 2 08:08:42 2006 +++ squid-2.6.STABLE5/src/access_log.c Thu Sep 28 15:55:37 2006 @@ -1,6 +1,6 @@ /* - * $Id: access_log.c,v 1.92 2006/09/02 14:08:42 hno Exp $ + * $Id: access_log.c,v 1.93 2006/09/28 21:55:37 hno Exp $ * * DEBUG: section 46 Access Log * AUTHOR: Duane Wessels @@ -1031,31 +1031,46 @@ #endif if (user && !*user) safe_free(user); - logfilePrintf(logfile, "%9ld.%03d %6d %s %s/%03d %" PRINTF_OFF_T " %s %s %s %s%s/%s %s", - (long int) current_time.tv_sec, - (int) current_time.tv_usec / 1000, - al->cache.msec, - client, - log_tags[al->cache.code], - al->http.code, - al->cache.size, - al->private.method_str, - al->url, - user ? user : dash_str, - al->hier.ping.timedout ? "TIMEOUT_" : "", - hier_strings[al->hier.code], - al->hier.host, - al->http.content_type); - safe_free(user); - if (Config.onoff.log_mime_hdrs) { + if (!Config.onoff.log_mime_hdrs) { + logfilePrintf(logfile, "%9ld.%03d %6d %s %s/%03d %" PRINTF_OFF_T " %s %s %s %s%s/%s %s\n", + (long int) current_time.tv_sec, + (int) current_time.tv_usec / 1000, + al->cache.msec, + client, + log_tags[al->cache.code], + al->http.code, + al->cache.size, + al->private.method_str, + al->url, + user ? user : dash_str, + al->hier.ping.timedout ? "TIMEOUT_" : "", + hier_strings[al->hier.code], + al->hier.host, + al->http.content_type); + } else { char *ereq = log_quote(al->headers.request); char *erep = log_quote(al->headers.reply); - logfilePrintf(logfile, " [%s] [%s]\n", ereq, erep); + logfilePrintf(logfile, "%9ld.%03d %6d %s %s/%03d %" PRINTF_OFF_T " %s %s %s %s%s/%s %s [%s] [%s]\n", + (long int) current_time.tv_sec, + (int) current_time.tv_usec / 1000, + al->cache.msec, + client, + log_tags[al->cache.code], + al->http.code, + al->cache.size, + al->private.method_str, + al->url, + user ? user : dash_str, + al->hier.ping.timedout ? "TIMEOUT_" : "", + hier_strings[al->hier.code], + al->hier.host, + al->http.content_type, + ereq, + erep); safe_free(ereq); safe_free(erep); - } else { - logfilePrintf(logfile, "\n"); } + safe_free(user); } static void diff -ruN squid-2.6.STABLE4/src/acl.c squid-2.6.STABLE5/src/acl.c --- squid-2.6.STABLE4/src/acl.c Fri Sep 22 04:44:24 2006 +++ squid-2.6.STABLE5/src/acl.c Mon Oct 16 14:11:41 2006 @@ -1,6 +1,6 @@ /* - * $Id: acl.c,v 1.314 2006/09/22 10:44:24 hno Exp $ + * $Id: acl.c,v 1.316 2006/10/16 20:11:41 serassio Exp $ * * DEBUG: section 28 Access Control * AUTHOR: Duane Wessels @@ -623,7 +623,7 @@ } } else { /* assume its time-of-day spec */ - if ((sscanf(t, "%d:%d-%d:%d", &h1, &m1, &h2, &m2) < 4) || (!((h1 >= 0 && h1 < 24) && (h2 >= 0 && h2 < 24) && (m1 >= 0 && m1 < 60) && (m2 >= 0 && m2 < 60)))) { + if ((sscanf(t, "%d:%d-%d:%d", &h1, &m1, &h2, &m2) < 4) || (!((h1 >= 0 && h1 < 24) && ((h2 >= 0 && h2 < 24) || (h2 == 24 && m2 == 0)) && (m1 >= 0 && m1 < 60) && (m2 >= 0 && m2 < 60)))) { debug(28, 0) ("aclParseTimeSpec: ERROR: Bad time range '%s'\n", t); self_destruct(); } @@ -747,7 +747,7 @@ acl_hdr_data *q = *acldata; *acldata = q->next; if (q->reglist) - aclDestroyRegexList((*acldata)->reglist); + aclDestroyRegexList(q->reglist); safe_free(q); } } diff -ruN squid-2.6.STABLE4/src/auth/Makefile.in squid-2.6.STABLE5/src/auth/Makefile.in --- squid-2.6.STABLE4/src/auth/Makefile.in Fri Sep 22 03:09:49 2006 +++ squid-2.6.STABLE5/src/auth/Makefile.in Sun Oct 29 19:21:35 2006 @@ -123,7 +123,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -207,6 +206,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ @@ -258,7 +259,7 @@ # Makefile for authentication modules in the Squid Object Cache server # -# $Id: Makefile.in,v 1.35 2006/09/22 09:09:49 hno Exp $ +# $Id: Makefile.in,v 1.37 2006/10/30 02:21:35 hno Exp $ # AUTOMAKE_OPTIONS = subdir-objects EXTRA_LIBRARIES = libbasic.a libdigest.a libntlm.a libnegotiate.a diff -ruN squid-2.6.STABLE4/src/cache_cf.c squid-2.6.STABLE5/src/cache_cf.c --- squid-2.6.STABLE4/src/cache_cf.c Fri Sep 22 04:47:04 2006 +++ squid-2.6.STABLE5/src/cache_cf.c Sat Sep 30 15:01:08 2006 @@ -1,6 +1,6 @@ /* - * $Id: cache_cf.c,v 1.457 2006/09/22 10:47:04 hno Exp $ + * $Id: cache_cf.c,v 1.458 2006/09/30 21:01:08 hno Exp $ * * DEBUG: section 3 Configuration File Parsing * AUTHOR: Harvest Derived @@ -277,6 +277,15 @@ return i; } +static u_short +GetShort(void) +{ + char *token = strtok(NULL, w_space); + if (token == NULL) + self_destruct(); + return xatos(token); +} + static squid_off_t GetOffT(void) { @@ -1583,7 +1592,6 @@ { char *token = NULL; peer *p; - int i; p = cbdataAlloc(peer); p->http_port = CACHE_HTTP_PORT; p->icp.port = CACHE_ICP_PORT; @@ -1597,10 +1605,10 @@ if ((token = strtok(NULL, w_space)) == NULL) self_destruct(); p->type = parseNeighborType(token); - i = GetInteger(); - p->http_port = (u_short) i; - i = GetInteger(); - p->icp.port = (u_short) i; + p->http_port = GetShort(); + if (!p->http_port) + self_destruct(); + p->icp.port = GetShort(); p->connection_auth = -1; /* auto */ while ((token = strtok(NULL, w_space))) { if (!strcasecmp(token, "proxy-only")) { @@ -1979,16 +1987,13 @@ parse_ushortlist(ushortlist ** P) { char *token; - int i; + u_short i; ushortlist *u; ushortlist **U; while ((token = strtok(NULL, w_space))) { - if (sscanf(token, "%d", &i) != 1) - self_destruct(); - if (i < 0) - i = 0; + i = GetShort(); u = xcalloc(1, sizeof(ushortlist)); - u->i = (u_short) i; + u->i = i; for (U = P; *U; U = &(*U)->next); *U = u; } @@ -2413,12 +2418,7 @@ static void parse_ushort(u_short * var) { - int i; - - i = GetInteger(); - if (i < 0) - i = 0; - *var = (u_short) i; + *var = GetShort(); } static void diff -ruN squid-2.6.STABLE4/src/cf.data.pre squid-2.6.STABLE5/src/cf.data.pre --- squid-2.6.STABLE4/src/cf.data.pre Fri Sep 22 00:36:51 2006 +++ squid-2.6.STABLE5/src/cf.data.pre Thu Oct 12 14:48:48 2006 @@ -1,6 +1,6 @@ # -# $Id: cf.data.pre,v 1.371 2006/09/22 06:36:51 swilton Exp $ +# $Id: cf.data.pre,v 1.374 2006/10/12 20:48:48 wessels Exp $ # # # SQUID Web Proxy Cache http://www.squid-cache.org/ @@ -1062,10 +1062,13 @@ see the --enable-storeio configure option. 'Directory' is a top-level directory where cache swap - files will be stored. If you want to use an entire disk + files will be stored. If you want to use an entire disk for caching, this can be the mount-point directory. The directory must exist and be writable by the Squid - process. Squid will NOT create this directory for you. + process. Squid will NOT create this directory for you. + Only using COSS, a raw disk device or a stripe file can + be specified, but the configuration of the "cache_wap_log" + tag is mandatory. The ufs store type: @@ -2120,9 +2123,9 @@ as ttl) children=n number of processes spawn to service external acl lookups of this type. - Note: see compatibility note below concurrency=n concurrency level per process. Use 0 for simple helpers who can only process a single request at a time. + Note: see compatibility note below cache=n result cache size, 0 is unbounded (default) grace= Percentage remaining of TTL where a refresh of a cached entry should be initiated without needing to @@ -2186,13 +2189,10 @@ of the above described quoting format. Compatibility Note: The children= option was named concurrency= in - Squid-2.5.STABLE3 and earlier and such syntax is still accepted to - keep compatibility within the Squid-2.5 release. However, the meaning - of concurrency= option has changed in Squid-3 and the old syntax of - the directive is therefore deprecated from Squid-2.5.STABLE4 and later. - If you want to be able to easily downgrade to earlier Squid-2.5 - releases you may want to continue using the old name, if not - please use the new name. + Squid-2.5.STABLE3 and earlier, and was accepted as an alias for the + duration of the Squid-2.5 releases to keep compatibility. However, + the meaning of concurrency= option has changed in Squid-2.6 to match + that of Squid-3 and the old syntax no longer works. DOC_END COMMENT_START @@ -2801,10 +2801,10 @@ acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 -acl SSL_ports port 443 563 +acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp -acl Safe_ports port 443 563 # https, snews +acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports diff -ruN squid-2.6.STABLE4/src/client_side.c squid-2.6.STABLE5/src/client_side.c --- squid-2.6.STABLE4/src/client_side.c Fri Sep 22 03:47:55 2006 +++ squid-2.6.STABLE5/src/client_side.c Sat Sep 30 15:10:48 2006 @@ -1,6 +1,6 @@ /* - * $Id: client_side.c,v 1.678 2006/09/22 09:47:55 hno Exp $ + * $Id: client_side.c,v 1.680 2006/09/30 21:10:48 hno Exp $ * * DEBUG: section 33 Client-side Routines * AUTHOR: Duane Wessels @@ -2154,6 +2154,14 @@ debug(33, 2) ("clientProcessHit: Vary detected!\n"); return; } + case VARY_RESTART: + /* Used on collapsed requests when the main request wasn't + * compatible. Resart processing from the beginning. + */ + safe_free(r->vary_hdr); + safe_free(r->vary_headers); + clientProcessRequest(http); + return; case VARY_CANCEL: /* varyEvaluateMatch found a object loop. Process as miss */ debug(33, 1) ("clientProcessHit: Vary object loop!\n"); @@ -2180,6 +2188,7 @@ http->log_type = LOG_TCP_NEGATIVE_HIT; clientSendMoreHeaderData(data, buf, size); } else { + memFree(buf, MEM_CLIENT_SOCK_BUF); http->log_type = LOG_TCP_MISS; clientProcessMiss(http); } @@ -3306,6 +3315,9 @@ http->entry = NULL; return LOG_TCP_MISS; } + if (EBIT_TEST(e->flags, KEY_EARLY_PUBLIC)) { + r->flags.collapsed = 1; /* Don't trust the store entry */ + } if (EBIT_TEST(e->flags, ENTRY_SPECIAL)) { /* Special entries are always hits, no matter what the client says */ debug(33, 3) ("clientProcessRequest2: ENTRY_SPECIAL HIT\n"); @@ -3349,6 +3361,7 @@ debug(33, 4) ("clientProcessRequest: %s '%s'\n", RequestMethodStr[r->method], url); + r->flags.collapsed = 0; if (r->method == METHOD_CONNECT && !http->redirect.status) { http->log_type = LOG_TCP_MISS; #if USE_SSL && SSL_CONNECT_INTERCEPT @@ -3483,6 +3496,15 @@ http->entry = clientCreateStoreEntry(http, r->method, r->flags); if (Config.onoff.collapsed_forwarding && r->flags.cachable && !r->flags.need_validation && (r->method = METHOD_GET || r->method == METHOD_HEAD)) { http->entry->mem_obj->refresh_timestamp = squid_curtime; + /* Set the vary object state */ + safe_free(http->entry->mem_obj->vary_headers); + if (r->vary_headers) + http->entry->mem_obj->vary_headers = xstrdup(r->vary_headers); + safe_free(http->entry->mem_obj->vary_encoding); + if (strBuf(r->vary_encoding)) + http->entry->mem_obj->vary_encoding = xstrdup(strBuf(r->vary_encoding)); + http->entry->mem_obj->request = requestLink(r); + EBIT_SET(http->entry->flags, KEY_EARLY_PUBLIC); storeSetPublicKey(http->entry); } fwdStart(http->conn->fd, http->entry, r); @@ -4983,6 +5005,10 @@ /* Ouch.. we cannot handle this kind of variance */ /* XXX This cannot really happen, but just to be complete */ return VARY_CANCEL; + } else if (request->flags.collapsed) { + /* This request was merged before we knew the outcome. Don't trust the response */ + /* restart vary processing from the beginning */ + return VARY_RESTART; } else { return VARY_MATCH; } diff -ruN squid-2.6.STABLE4/src/comm.c squid-2.6.STABLE5/src/comm.c --- squid-2.6.STABLE4/src/comm.c Sat Sep 9 06:45:06 2006 +++ squid-2.6.STABLE5/src/comm.c Mon Oct 23 05:22:21 2006 @@ -1,6 +1,6 @@ /* - * $Id: comm.c,v 1.357 2006/09/09 12:45:06 serassio Exp $ + * $Id: comm.c,v 1.358 2006/10/23 11:22:21 hno Exp $ * * DEBUG: section 5 Socket Functions * AUTHOR: Harvest Derived @@ -1036,8 +1036,7 @@ void comm_init(void) { - fd_table = xcalloc(Squid_MaxFD, sizeof(fde)); - /* XXX account fd_table */ + fd_init(); /* 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 */ diff -ruN squid-2.6.STABLE4/src/comm_epoll.c squid-2.6.STABLE5/src/comm_epoll.c --- squid-2.6.STABLE4/src/comm_epoll.c Tue Aug 15 13:27:28 2006 +++ squid-2.6.STABLE5/src/comm_epoll.c Mon Oct 23 05:22:21 2006 @@ -1,6 +1,6 @@ /* - * $Id: comm_epoll.c,v 1.26 2006/08/15 19:27:28 hno Exp $ + * $Id: comm_epoll.c,v 1.27 2006/10/23 11:22:21 hno Exp $ * * DEBUG: section 5 Socket Functions * @@ -65,8 +65,8 @@ } } -void -comm_select_init() +static void +do_select_init() { kdpfd = epoll_create(Squid_MaxFD); if (kdpfd < 0) @@ -83,8 +83,8 @@ debug(5, 1) ("Using epoll for the IO loop\n"); } -void -comm_select_shutdown() +static void +do_select_shutdown() { fd_close(kdpfd); close(kdpfd); @@ -153,37 +153,20 @@ } } -int -comm_select(int msec) +static int +do_comm_select(int msec) { - static time_t last_timeout = 0; int i; int num; int fd; struct epoll_event *cevents; - double start = current_dtime; - - if (msec > MAX_POLL_TIME) - msec = MAX_POLL_TIME; - - debug(5, 3) ("comm_select: timeout %d\n", msec); if (epoll_fds == 0) { assert(shutting_down); return COMM_SHUTDOWN; } - /* Check for disk io callbacks */ - storeDirCallback(); - - /* Check timeouts once per second */ - if (last_timeout != squid_curtime) { - last_timeout = squid_curtime; - checkTimeouts(); - } statCounter.syscalls.polls++; num = epoll_wait(kdpfd, events, MAX_EVENTS, msec); - statCounter.select_loops++; - if (num < 0) { getCurrentTime(); if (ignoreErrno(errno)) @@ -194,17 +177,13 @@ } statHistCount(&statCounter.select_fds_hist, num); - if (num > 0) { - for (i = 0, cevents = events; i < num; i++, cevents++) { - fd = cevents->data.fd; - comm_call_handlers(fd, cevents->events & ~EPOLLOUT, cevents->events & ~EPOLLIN); - } - getCurrentTime(); - statCounter.select_time += (current_dtime - start); - return COMM_OK; - } else { - getCurrentTime(); - debug(5, 8) ("comm_select: time out: %ld.\n", (long int) squid_curtime); + if (num == 0) return COMM_TIMEOUT; + + for (i = 0, cevents = events; i < num; i++, cevents++) { + fd = cevents->data.fd; + comm_call_handlers(fd, cevents->events & ~EPOLLOUT, cevents->events & ~EPOLLIN); } + + return COMM_OK; } diff -ruN squid-2.6.STABLE4/src/comm_generic.c squid-2.6.STABLE5/src/comm_generic.c --- squid-2.6.STABLE4/src/comm_generic.c Tue Jun 27 05:14:22 2006 +++ squid-2.6.STABLE5/src/comm_generic.c Tue Oct 31 11:25:15 2006 @@ -1,6 +1,6 @@ /* - * $Id: comm_generic.c,v 1.5 2006/06/27 11:14:22 hno Exp $ + * $Id: comm_generic.c,v 1.8 2006/10/31 18:25:15 serassio Exp $ * * DEBUG: section 5 Socket Functions * @@ -39,6 +39,33 @@ static int MAX_POLL_TIME = 1000; /* see also comm_quick_poll_required() */ +#if DELAY_POOLS +static int *slow_fds = NULL; +static int n_slow_fds = 0; +#endif + +static void do_select_init(void); + +void +comm_select_init(void) +{ +#if DELAY_POOLS + slow_fds = xmalloc(sizeof(int) * Squid_MaxFD); +#endif + do_select_init(); +} + +static void do_select_shutdown(void); + +void +comm_select_shutdown(void) +{ + do_select_shutdown(); +#if DELAY_POOLS + safe_free(slow_fds); +#endif +} + /* Defer reads from this fd */ void commDeferFD(int fd) @@ -84,10 +111,114 @@ return F->defer_check(fd, F->defer_data); } +#if DELAY_POOLS +static void +commAddSlow(int fd) +{ + fde *F = &fd_table[fd]; + if (F->slow_id) + return; + F->slow_id = ++n_slow_fds; + assert(n_slow_fds < Squid_MaxFD); + slow_fds[n_slow_fds] = fd; +} + +void +commRemoveSlow(int fd) +{ + int fd2; + fde *F = &fd_table[fd]; + if (!F->slow_id) + return; + fd2 = slow_fds[n_slow_fds--]; + if (F->slow_id <= n_slow_fds) { + fde *F2; + slow_fds[F->slow_id] = fd2; + F2 = &fd_table[fd2]; + F2->slow_id = F->slow_id; + } + F->slow_id = 0; +} +#endif + +static int comm_select_handled; + +static inline int do_comm_select(int msec); + +static inline void comm_call_handlers(int fd, int read_event, int write_event); + +static inline void +do_call_incoming(int fd) +{ + fde *F = &fd_table[fd]; + if (!F->flags.backoff) + comm_call_handlers(fd, -1, -1); +} + static void +do_check_incoming(void) +{ + int i; + for (i = 0; i < NHttpSockets; i++) + do_call_incoming(HttpSockets[i]); + if (theInIcpConnection >= 0) + do_call_incoming(theInIcpConnection); + if (theOutIcpConnection != theInIcpConnection) + do_call_incoming(theOutIcpConnection); +} + +static inline void +check_incoming(void) +{ + comm_select_handled++; + if (comm_select_handled > 30 && comm_select_handled > NHttpSockets << 2) { + comm_select_handled = 0; + do_check_incoming(); + } +} + +#if DELAY_POOLS +static void +comm_call_slowfds(void) +{ + while (n_slow_fds) { + int i = (squid_random() % n_slow_fds) + 1; + int fd = slow_fds[i]; + fde *F = &fd_table[fd]; + commRemoveSlow(fd); + if (F->read_handler) { + PF *hdl = F->read_handler; + void *hdl_data = F->read_data; + debug(5, 8) ("comm_call_handlers(): Calling read handler on fd=%d\n", fd); +#if SIMPLE_COMM_HANDLER + commUpdateReadHandler(fd, NULL, NULL); + commResumeFD(fd); + hdl(fd, hdl_data); +#else + /* Optimized version to avoid the fd bouncing in/out of the waited set */ + F->read_handler = NULL; + F->read_data = NULL; + F->read_pending = COMM_PENDING_NORMAL; + hdl(fd, hdl_data); + /* backoff check is for delayed connections kicked alive from checkTimeouts */ + if (F->flags.open && (!F->read_handler || F->flags.backoff)) { + if (F->flags.backoff && commDeferRead(fd) != 1) + F->flags.backoff = 0; + commUpdateEvents(fd); + } +#endif + statCounter.select_fds++; + check_incoming(); + } + } +} +#endif + +static inline void comm_call_handlers(int fd, int read_event, int write_event) { fde *F = &fd_table[fd]; + const int do_incoming = read_event == 1 || write_event == 1; debug(5, 8) ("comm_call_handlers(): got fd=%d read_event=%x write_event=%x F->read_handler=%p F->write_handler=%p\n" ,fd, read_event, write_event, F->read_handler, F->write_handler); if (F->read_handler) { @@ -109,13 +240,18 @@ void *hdl_data = F->read_data; /* If the descriptor is meant to be deferred, don't handle */ switch (commDeferRead(fd)) { - case 1: +#if DELAY_POOLS + case -1: + commAddSlow(fd); + break; +#endif + default: if (!(F->flags.backoff)) { debug(5, 1) ("comm_call_handlers(): WARNING defer handler for fd=%d (desc=%s) does not call commDeferFD() - backing off manually\n", fd, F->desc); commDeferFD(fd); } break; - default: + case 0: debug(5, 8) ("comm_call_handlers(): Calling read handler on fd=%d\n", fd); #if SIMPLE_COMM_HANDLER commUpdateReadHandler(fd, NULL, NULL); @@ -130,6 +266,9 @@ commUpdateEvents(fd); #endif statCounter.select_fds++; + if (do_incoming) + check_incoming(); + break; } } } @@ -163,6 +302,8 @@ commUpdateEvents(fd); #endif statCounter.select_fds++; + if (do_incoming) + check_incoming(); } } } @@ -173,17 +314,32 @@ int fd; fde *F = NULL; PF *callback; +#if DELAY_POOLS + delayPoolsUpdate(NULL); +#endif for (fd = 0; fd <= Biggest_FD; fd++) { F = &fd_table[fd]; if (!F->flags.open) continue; - if (F->flags.backoff) - commResumeFD(fd); + if (F->flags.backoff) { + switch (commDeferRead(fd)) { + case 0: + commResumeFD(fd); + break; +#if DELAY_POOLS + case -1: + commAddSlow(fd); + break; +#endif + } + } if (F->timeout == 0) continue; if (F->timeout > squid_curtime) continue; debug(5, 5) ("checkTimeouts: FD %d Expired\n", fd); + if (F->flags.backoff) + commResumeFD(fd); if (F->timeout_handler) { debug(5, 5) ("checkTimeouts: FD %d: Call timeout handler\n", fd); callback = F->timeout_handler; @@ -196,6 +352,50 @@ } } + +int +comm_select(int msec) +{ + static time_t last_timeout = 0; + int rc; + double start = current_dtime; + + debug(5, 3) ("comm_select: timeout %d\n", msec); + + if (msec > MAX_POLL_TIME) + msec = MAX_POLL_TIME; + +#if DELAY_POOLS + /* We have delayed fds in queue? */ + if (n_slow_fds) + msec = 0; +#endif + + statCounter.select_loops++; + + /* Check for disk io callbacks */ + storeDirCallback(); + + /* Check timeouts once per second */ + if (last_timeout != squid_curtime) { + last_timeout = squid_curtime; + checkTimeouts(); + } + comm_select_handled = 0; + + rc = do_comm_select(msec); + +#if DELAY_POOLS + comm_call_slowfds(); +#endif + getCurrentTime(); + statCounter.select_time += (current_dtime - start); + + if (rc == COMM_TIMEOUT) + debug(5, 8) ("comm_select: time out\n"); + + return rc; +} /* Called by async-io or diskd to speed up the polling */ void diff -ruN squid-2.6.STABLE4/src/comm_kqueue.c squid-2.6.STABLE5/src/comm_kqueue.c --- squid-2.6.STABLE4/src/comm_kqueue.c Tue Aug 15 13:27:28 2006 +++ squid-2.6.STABLE5/src/comm_kqueue.c Mon Oct 23 05:22:21 2006 @@ -1,6 +1,6 @@ /* - * $Id: comm_kqueue.c,v 1.9 2006/08/15 19:27:28 hno Exp $ + * $Id: comm_kqueue.c,v 1.10 2006/10/23 11:22:21 hno Exp $ * * DEBUG: section 5 Socket Functions * @@ -50,8 +50,8 @@ static int kqoff; /* offset into the buffer */ static unsigned *kqueue_state; /* keep track of the kqueue state */ -void -comm_select_init() +static void +do_select_init() { kq = kqueue(); if (kq < 0) @@ -71,8 +71,8 @@ debug(5, 1) ("Using kqueue for the IO loop\n"); } -void -comm_select_shutdown() +static void +do_select_shutdown() { fd_close(kq); close(kq); @@ -123,37 +123,20 @@ } } -int -comm_select(int msec) +static int +do_comm_select(int msec) { - static time_t last_timeout = 0; int i; int num; - double start = current_dtime; static struct kevent ke[KE_LENGTH]; struct timespec timeout; - if (msec > MAX_POLL_TIME) - msec = MAX_POLL_TIME; - timeout.tv_sec = msec / 1000; timeout.tv_nsec = (msec % 1000) * 1000000; - debug(5, 3) ("comm_select: timeout %d\n", msec); - - /* Check for disk io callbacks */ - storeDirCallback(); - - /* Check timeouts once per second */ - if (last_timeout != squid_curtime) { - last_timeout = squid_curtime; - checkTimeouts(); - } statCounter.syscalls.polls++; num = kevent(kq, kqlst, kqoff, ke, KE_LENGTH, &timeout); - statCounter.select_loops++; kqoff = 0; - if (num < 0) { getCurrentTime(); if (ignoreErrno(errno)) @@ -162,11 +145,9 @@ debug(5, 1) ("comm_select: kevent failure: %s\n", xstrerror()); return COMM_ERROR; } - if (num == 0) { - getCurrentTime(); - return COMM_TIMEOUT; - } statHistCount(&statCounter.select_fds_hist, num); + if (num == 0) + return COMM_TIMEOUT; for (i = 0; i < num; i++) { int fd = (int) ke[i].ident; @@ -190,7 +171,5 @@ } } - getCurrentTime(); - statCounter.select_time += (current_dtime - start); return COMM_OK; } diff -ruN squid-2.6.STABLE4/src/comm_poll.c squid-2.6.STABLE5/src/comm_poll.c --- squid-2.6.STABLE4/src/comm_poll.c Tue Aug 15 13:27:28 2006 +++ squid-2.6.STABLE5/src/comm_poll.c Fri Oct 27 18:34:54 2006 @@ -1,6 +1,6 @@ /* - * $Id: comm_poll.c,v 1.21 2006/08/15 19:27:28 hno Exp $ + * $Id: comm_poll.c,v 1.23 2006/10/28 00:34:54 hno Exp $ * * DEBUG: section 5 Socket Functions * @@ -33,6 +33,7 @@ */ #include "squid.h" +#include "comm_generic.c" #if HAVE_SYS_POLL_H #include @@ -40,539 +41,19 @@ #include #endif -static int MAX_POLL_TIME = 1000; /* see also comm_quick_poll_required() */ - -/* STATIC */ -static int fdIsHttp(int fd); -static int fdIsIcp(int fd); -static int fdIsDns(int fd); -static int commDeferRead(int fd); -static void checkTimeouts(void); -static OBJH commIncomingStats; -static int comm_check_incoming_poll_handlers(int nfds, int *fds); -static void comm_poll_dns_incoming(void); - -/* - * Automatic tuning for incoming requests: - * - * INCOMING sockets are the ICP and HTTP ports. We need to check these - * fairly regularly, but how often? When the load increases, we - * want to check the incoming sockets more often. If we have a lot - * of incoming ICP, then we need to check these sockets more than - * if we just have HTTP. - * - * The variables 'incoming_icp_interval' and 'incoming_http_interval' - * determine how many normal I/O events to process before checking - * incoming sockets again. Note we store the incoming_interval - * multipled by a factor of (2^INCOMING_FACTOR) to have some - * pseudo-floating point precision. - * - * The variable 'icp_io_events' and 'http_io_events' counts how many normal - * I/O events have been processed since the last check on the incoming - * sockets. When io_events > incoming_interval, its time to check incoming - * sockets. - * - * Every time we check incoming sockets, we count how many new messages - * or connections were processed. This is used to adjust the - * incoming_interval for the next iteration. The new incoming_interval - * is calculated as the current incoming_interval plus what we would - * like to see as an average number of events minus the number of - * events just processed. - * - * incoming_interval = incoming_interval + target_average - number_of_events_processed - * - * There are separate incoming_interval counters for both HTTP and ICP events - * - * You can see the current values of the incoming_interval's, as well as - * a histogram of 'incoming_events' by asking the cache manager - * for 'comm_incoming', e.g.: - * - * % ./client mgr:comm_incoming - * - * Caveats: - * - * - We have MAX_INCOMING_INTEGER as a magic upper limit on - * incoming_interval for both types of sockets. At the - * largest value the cache will effectively be idling. - * - * - The higher the INCOMING_FACTOR, the slower the algorithm will - * respond to load spikes/increases/decreases in demand. A value - * between 3 and 8 is recommended. - */ - -#define MAX_INCOMING_INTEGER 256 -#define INCOMING_FACTOR 5 -#define MAX_INCOMING_INTERVAL (MAX_INCOMING_INTEGER << INCOMING_FACTOR) -static int icp_io_events = 0; -static int dns_io_events = 0; -static int http_io_events = 0; -static int incoming_icp_interval = 16 << INCOMING_FACTOR; -static int incoming_dns_interval = 16 << INCOMING_FACTOR; -static int incoming_http_interval = 16 << INCOMING_FACTOR; -#define commCheckICPIncoming (++icp_io_events > (incoming_icp_interval>> INCOMING_FACTOR)) -#define commCheckDNSIncoming (++dns_io_events > (incoming_dns_interval>> INCOMING_FACTOR)) -#define commCheckHTTPIncoming (++http_io_events > (incoming_http_interval>> INCOMING_FACTOR)) - -static int -fdIsIcp(int fd) -{ - if (fd == theInIcpConnection) - return 1; - if (fd == theOutIcpConnection) - return 1; - return 0; -} - -static int -fdIsDns(int fd) -{ - if (fd == DnsSocket) - return 1; - return 0; -} - -static int -fdIsHttp(int fd) -{ - int j; - for (j = 0; j < NHttpSockets; j++) { - if (fd == HttpSockets[j]) - return 1; - } - return 0; -} - -#if DELAY_POOLS -static int slowfdcnt = 0; -static int slowfdarr[SQUID_MAXFD]; +static struct pollfd *pfds; +static int *pfd_map; +static int nfds = 0; static void -commAddSlowFd(int fd) -{ - assert(slowfdcnt < SQUID_MAXFD); - slowfdarr[slowfdcnt++] = fd; -} - -static int -commGetSlowFd(void) -{ - int whichfd, retfd; - - if (!slowfdcnt) - return -1; - whichfd = squid_random() % slowfdcnt; - retfd = slowfdarr[whichfd]; - slowfdarr[whichfd] = slowfdarr[--slowfdcnt]; - return retfd; -} -#endif - -static int -comm_check_incoming_poll_handlers(int nfds, int *fds) +do_select_init() { int i; - int fd; - PF *hdl = NULL; - int npfds; - struct pollfd pfds[3 + MAXHTTPPORTS]; - incoming_sockets_accepted = 0; - for (i = npfds = 0; i < nfds; i++) { - int events; - fd = fds[i]; - events = 0; - if (fd_table[fd].read_handler) - events |= POLLRDNORM; - if (fd_table[fd].write_handler) - events |= POLLWRNORM; - if (events) { - pfds[npfds].fd = fd; - pfds[npfds].events = events; - pfds[npfds].revents = 0; - npfds++; - } + pfds = xcalloc(sizeof(*pfds), Squid_MaxFD); + pfd_map = xcalloc(sizeof(*pfd_map), Squid_MaxFD); + for (i = 0; i < Squid_MaxFD; i++) { + pfd_map[i] = -1; } - if (!nfds) - return -1; - getCurrentTime(); - statCounter.syscalls.polls++; - if (poll(pfds, npfds, 0) < 1) - return incoming_sockets_accepted; - for (i = 0; i < npfds; i++) { - int revents; - if (((revents = pfds[i].revents) == 0) || ((fd = pfds[i].fd) == -1)) - continue; - if (revents & (POLLRDNORM | POLLIN | POLLHUP | POLLERR)) { - if ((hdl = fd_table[fd].read_handler)) { - fd_table[fd].read_handler = NULL; - hdl(fd, fd_table[fd].read_data); - } else if (pfds[i].events & POLLRDNORM) - debug(5, 1) ("comm_poll_incoming: FD %d NULL read handler\n", - fd); - } - if (revents & (POLLWRNORM | POLLOUT | POLLHUP | POLLERR)) { - if ((hdl = fd_table[fd].write_handler)) { - fd_table[fd].write_handler = NULL; - hdl(fd, fd_table[fd].write_data); - } else if (pfds[i].events & POLLWRNORM) - debug(5, 1) ("comm_poll_incoming: FD %d NULL write_handler\n", - fd); - } - } - return incoming_sockets_accepted; -} - -static void -comm_poll_icp_incoming(void) -{ - int nfds = 0; - int fds[2]; - int nevents; - icp_io_events = 0; - if (theInIcpConnection >= 0) - fds[nfds++] = theInIcpConnection; - if (theInIcpConnection != theOutIcpConnection) - if (theOutIcpConnection >= 0) - fds[nfds++] = theOutIcpConnection; - if (nfds == 0) - return; - nevents = comm_check_incoming_poll_handlers(nfds, fds); - incoming_icp_interval += Config.comm_incoming.icp_average - nevents; - if (incoming_icp_interval < Config.comm_incoming.icp_min_poll) - incoming_icp_interval = Config.comm_incoming.icp_min_poll; - if (incoming_icp_interval > MAX_INCOMING_INTERVAL) - incoming_icp_interval = MAX_INCOMING_INTERVAL; - if (nevents > INCOMING_ICP_MAX) - nevents = INCOMING_ICP_MAX; - statHistCount(&statCounter.comm_icp_incoming, nevents); -} - -static void -comm_poll_http_incoming(void) -{ - int nfds = 0; - int fds[MAXHTTPPORTS]; - int j; - int nevents; - http_io_events = 0; - for (j = 0; j < NHttpSockets; j++) { - if (HttpSockets[j] < 0) - continue; - if (commDeferRead(HttpSockets[j])) - continue; - fds[nfds++] = HttpSockets[j]; - } - nevents = comm_check_incoming_poll_handlers(nfds, fds); - incoming_http_interval = incoming_http_interval - + Config.comm_incoming.http_average - nevents; - if (incoming_http_interval < Config.comm_incoming.http_min_poll) - incoming_http_interval = Config.comm_incoming.http_min_poll; - if (incoming_http_interval > MAX_INCOMING_INTERVAL) - incoming_http_interval = MAX_INCOMING_INTERVAL; - if (nevents > INCOMING_HTTP_MAX) - nevents = INCOMING_HTTP_MAX; - statHistCount(&statCounter.comm_http_incoming, nevents); -} - -/* poll all sockets; call handlers for those that are ready. */ -int -comm_select(int msec) -{ - struct pollfd pfds[SQUID_MAXFD]; -#if DELAY_POOLS - char slowfds[SQUID_MAXFD]; -#endif - int fd; - unsigned int i; - unsigned int maxfd; - unsigned int nfds; - unsigned int npending; - int num; - int callicp = 0, callhttp = 0; - int calldns = 0; - static time_t last_timeout = 0; - double timeout = current_dtime + (msec / 1000.0); - do { - double start; - getCurrentTime(); - start = current_dtime; - /* Handle any fs callbacks that need doing */ - storeDirCallback(); -#if DELAY_POOLS - memset(slowfds, 0, Biggest_FD); -#endif - if (commCheckICPIncoming) - comm_poll_icp_incoming(); - if (commCheckDNSIncoming) - comm_poll_dns_incoming(); - if (commCheckHTTPIncoming) - comm_poll_http_incoming(); - callicp = calldns = callhttp = 0; - nfds = 0; - npending = 0; - maxfd = Biggest_FD + 1; - for (i = 0; i < maxfd; i++) { - int events; - events = 0; - /* Check each open socket for a handler. */ - if (fd_table[i].read_handler) { - int dopoll = 1; - switch (commDeferRead(i)) { - case 0: - break; - case 1: - dopoll = 0; - break; -#if DELAY_POOLS - case -1: - slowfds[i] = 1; - break; -#endif - default: - fatalf("bad return value from commDeferRead(FD %d)\n", i); - /* NOTREACHED */ - } - if (dopoll) { - switch (fd_table[i].read_pending) { - case COMM_PENDING_NORMAL: - events |= POLLRDNORM; - break; - case COMM_PENDING_WANTS_WRITE: - events |= POLLWRNORM; - break; - case COMM_PENDING_WANTS_READ: - events |= POLLRDNORM; - break; - case COMM_PENDING_NOW: - events |= POLLRDNORM; - npending++; - break; - } - } - } - if (fd_table[i].write_handler) { - switch (fd_table[i].write_pending) { - case COMM_PENDING_NORMAL: - events |= POLLWRNORM; - break; - case COMM_PENDING_WANTS_WRITE: - events |= POLLWRNORM; - break; - case COMM_PENDING_WANTS_READ: - events |= POLLRDNORM; - break; - case COMM_PENDING_NOW: - events |= POLLWRNORM; - npending++; - break; - } - } - if (events) { - pfds[nfds].fd = i; - pfds[nfds].events = events; - pfds[nfds].revents = 0; - nfds++; - } - } - if (nfds == 0) { - assert(shutting_down); - return COMM_SHUTDOWN; - } - if (npending) - msec = 0; - if (msec > MAX_POLL_TIME) - msec = MAX_POLL_TIME; - statCounter.syscalls.polls++; - num = poll(pfds, nfds, msec); - statCounter.select_loops++; - if (num < 0 && !ignoreErrno(errno)) { - debug(5, 0) ("comm_select: poll failure: %s\n", xstrerror()); - assert(errno != EINVAL); - return COMM_ERROR; - /* NOTREACHED */ - } - debug(5, num ? 5 : 8) ("comm_select: %d+%u FDs ready\n", num, npending); - statHistCount(&statCounter.select_fds_hist, num); - /* Check timeout handlers ONCE each second. */ - if (squid_curtime > last_timeout) { - last_timeout = squid_curtime; - checkTimeouts(); - } - if (num <= 0 && npending == 0) - continue; - /* scan each socket but the accept socket. Poll this - * more frequently to minimize losses due to the 5 connect - * limit in SunOS */ - for (i = 0; i < nfds; i++) { - fde *F; - int revents = pfds[i].revents; - fd = pfds[i].fd; - if (fd == -1) - continue; - switch (fd_table[fd].read_pending) { - case COMM_PENDING_NORMAL: - case COMM_PENDING_WANTS_READ: - break; - case COMM_PENDING_WANTS_WRITE: - if (pfds[i].revents & (POLLOUT | POLLWRNORM)) - revents |= POLLIN; - break; - case COMM_PENDING_NOW: - revents |= POLLIN; - break; - } - switch (fd_table[fd].write_pending) { - case COMM_PENDING_NORMAL: - case COMM_PENDING_WANTS_WRITE: - break; - case COMM_PENDING_WANTS_READ: - if (pfds[i].revents & (POLLIN | POLLRDNORM)) - revents |= POLLOUT; - break; - case COMM_PENDING_NOW: - revents |= POLLOUT; - break; - } - if (revents == 0) - continue; - if (fdIsIcp(fd)) { - callicp = 1; - continue; - } - if (fdIsDns(fd)) { - calldns = 1; - continue; - } - if (fdIsHttp(fd)) { - callhttp = 1; - continue; - } - F = &fd_table[fd]; - if (revents & (POLLRDNORM | POLLIN | POLLHUP | POLLERR)) { - PF *hdl = F->read_handler; - debug(5, 6) ("comm_select: FD %d ready for reading\n", fd); - if (hdl == NULL) - (void) 0; /* Nothing to do */ -#if DELAY_POOLS - else if (slowfds[i]) - commAddSlowFd(fd); -#endif - else { - F->read_handler = NULL; - F->read_pending = COMM_PENDING_NORMAL; - hdl(fd, F->read_data); - statCounter.select_fds++; - if (commCheckICPIncoming) - comm_poll_icp_incoming(); - if (commCheckDNSIncoming) - comm_poll_dns_incoming(); - if (commCheckHTTPIncoming) - comm_poll_http_incoming(); - } - } - if (revents & (POLLWRNORM | POLLOUT | POLLHUP | POLLERR)) { - PF *hdl = F->write_handler; - debug(5, 5) ("comm_select: FD %d ready for writing\n", fd); - if (hdl != NULL) { - F->write_handler = NULL; - F->write_pending = COMM_PENDING_NORMAL; - hdl(fd, F->write_data); - statCounter.select_fds++; - if (commCheckICPIncoming) - comm_poll_icp_incoming(); - if (commCheckDNSIncoming) - comm_poll_dns_incoming(); - if (commCheckHTTPIncoming) - comm_poll_http_incoming(); - } - } - if (revents & POLLNVAL) { - close_handler *ch; - debug(5, 0) ("WARNING: FD %d has handlers, but it's invalid.\n", fd); - debug(5, 0) ("FD %d is a %s\n", fd, fdTypeStr[F->type]); - debug(5, 0) ("--> %s\n", F->desc); - debug(5, 0) ("tmout:%p read:%p write:%p\n", - F->timeout_handler, - F->read_handler, - F->write_handler); - for (ch = F->close_handler; ch; ch = ch->next) - debug(5, 0) (" close handler: %p\n", ch->handler); - if (F->close_handler) { - commCallCloseHandlers(fd); - } else if (F->timeout_handler) { - debug(5, 0) ("comm_select: Calling Timeout Handler\n"); - F->timeout_handler(fd, F->timeout_data); - } - F->close_handler = NULL; - F->timeout_handler = NULL; - F->read_handler = NULL; - F->write_handler = NULL; - if (F->flags.open) - fd_close(fd); - } - } - if (callicp) - comm_poll_icp_incoming(); - if (calldns) - comm_poll_dns_incoming(); - if (callhttp) - comm_poll_http_incoming(); -#if DELAY_POOLS - while ((fd = commGetSlowFd()) != -1) { - fde *F = &fd_table[fd]; - PF *hdl = F->read_handler; - debug(5, 6) ("comm_select: slow FD %d selected for reading\n", fd); - if (hdl != NULL) { - F->read_handler = NULL; - F->read_pending = COMM_PENDING_NORMAL; - hdl(fd, F->read_data); - statCounter.select_fds++; - if (commCheckICPIncoming) - comm_poll_icp_incoming(); - if (commCheckDNSIncoming) - comm_poll_dns_incoming(); - if (commCheckHTTPIncoming) - comm_poll_http_incoming(); - } - } -#endif - getCurrentTime(); - statCounter.select_time += (current_dtime - start); - return COMM_OK; - } - while (timeout > current_dtime); - debug(5, 8) ("comm_select: time out: %ld.\n", (long int) squid_curtime); - return COMM_TIMEOUT; -} - -static void -comm_poll_dns_incoming(void) -{ - int nfds = 0; - int fds[2]; - int nevents; - dns_io_events = 0; - if (DnsSocket < 0) - return; - fds[nfds++] = DnsSocket; - nevents = comm_check_incoming_poll_handlers(nfds, fds); - if (nevents < 0) - return; - incoming_dns_interval += Config.comm_incoming.dns_average - nevents; - if (incoming_dns_interval < Config.comm_incoming.dns_min_poll) - incoming_dns_interval = Config.comm_incoming.dns_min_poll; - if (incoming_dns_interval > MAX_INCOMING_INTERVAL) - incoming_dns_interval = MAX_INCOMING_INTERVAL; - if (nevents > INCOMING_DNS_MAX) - nevents = INCOMING_DNS_MAX; - statHistCount(&statCounter.comm_dns_incoming, nevents); -} - -void -comm_select_init(void) -{ - cachemgrRegister("comm_incoming", - "comm_incoming() stats", - commIncomingStats, 0, 1); } void @@ -581,9 +62,11 @@ debug(5, 1) ("Using poll for the IO loop\n"); } -void -comm_select_shutdown(void) +static void +do_select_shutdown() { + safe_free(pfds); + safe_free(pfd_map); } void @@ -592,86 +75,76 @@ storeAppendPrintf(sentry, "\tIO loop method: poll\n"); } -static void -commIncomingStats(StoreEntry * sentry) -{ - StatCounters *f = &statCounter; - storeAppendPrintf(sentry, "Current incoming_icp_interval: %d\n", - incoming_icp_interval >> INCOMING_FACTOR); - storeAppendPrintf(sentry, "Current incoming_dns_interval: %d\n", - incoming_dns_interval >> INCOMING_FACTOR); - storeAppendPrintf(sentry, "Current incoming_http_interval: %d\n", - incoming_http_interval >> INCOMING_FACTOR); - storeAppendPrintf(sentry, "\n"); - storeAppendPrintf(sentry, "Histogram of events per incoming socket type\n"); - storeAppendPrintf(sentry, "ICP Messages handled per comm_poll_icp_incoming() call:\n"); - statHistDump(&f->comm_icp_incoming, sentry, statHistIntDumper); - storeAppendPrintf(sentry, "DNS Messages handled per comm_poll_dns_incoming() call:\n"); - statHistDump(&f->comm_dns_incoming, sentry, statHistIntDumper); - storeAppendPrintf(sentry, "HTTP Messages handled per comm_poll_http_incoming() call:\n"); - statHistDump(&f->comm_http_incoming, sentry, statHistIntDumper); -} - void commSetEvents(int fd, int need_read, int need_write) { - /* XXX Here we could optimize the poll arrays quite considerably */ + int pfdn = pfd_map[fd]; + struct pollfd *pfd = pfdn >= 0 ? &pfds[pfdn] : NULL; + short events = (need_read ? POLLRDNORM : 0) | (need_write ? POLLWRNORM : 0); + + if (!pfd && !events) + return; + + if (!pfd) { + pfdn = nfds++; + pfd_map[fd] = pfdn; + pfd = &pfds[pfdn]; + pfd->fd = fd; + pfd->events = events; + } else if (events) { + pfd->events = events; + } else { + pfd_map[fd] = -1; + nfds--; + *pfd = pfds[nfds]; + pfds[nfds].events = 0; + pfds[nfds].revents = 0; + pfds[nfds].fd = -1; + if (pfd->fd >= 0) + pfd_map[pfd->fd] = pfdn; + } } static int -commDeferRead(int fd) +do_comm_select(int msec) { - fde *F = &fd_table[fd]; - if (F->defer_check == NULL) - return 0; - return F->defer_check(fd, F->defer_data); -} + int num; + int i; -static void -checkTimeouts(void) -{ - int fd; - fde *F = NULL; - PF *callback; - for (fd = 0; fd <= Biggest_FD; fd++) { - F = &fd_table[fd]; - if (!F->flags.open) - continue; - if (F->timeout == 0) - continue; - if (F->timeout > squid_curtime) - continue; - debug(5, 5) ("checkTimeouts: FD %d Expired\n", fd); - if (F->timeout_handler) { - debug(5, 5) ("checkTimeouts: FD %d: Call timeout handler\n", fd); - callback = F->timeout_handler; - F->timeout_handler = NULL; - callback(fd, F->timeout_data); - } else { - debug(5, 5) ("checkTimeouts: FD %d: Forcing comm_close()\n", fd); - comm_close(fd); - } + if (nfds == 0) { + assert(shutting_down); + return COMM_SHUTDOWN; + } + statCounter.syscalls.selects++; + num = poll(pfds, nfds, msec); + if (num < 0) { + getCurrentTime(); + if (ignoreErrno(errno)) + return COMM_OK; + + debug(5, 1) ("comm_select: poll failure: %s\n", xstrerror()); + return COMM_ERROR; } -} + statHistCount(&statCounter.select_fds_hist, num); + if (num == 0) + return COMM_TIMEOUT; -/* Called by async-io or diskd to speed up the polling */ -void -comm_quick_poll_required(void) -{ - MAX_POLL_TIME = 10; -} + for (i = nfds - 1; num > 0 && i >= 0; i--) { + struct pollfd *pfd = &pfds[i]; + short read_event, write_event; -/* Defer reads from this fd */ -void -commDeferFD(int fd) -{ - /* Not implemented */ -} + if (!pfd->revents) + continue; -/* Resume reading from the given fd */ -void -commResumeFD(int fd) -{ - /* Not implemented */ + read_event = pfd->revents & (POLLRDNORM | POLLIN | POLLHUP | POLLERR); + write_event = pfd->revents & (POLLWRNORM | POLLOUT | POLLHUP | POLLERR); + + pfd->revents = 0; + + comm_call_handlers(pfd->fd, read_event, write_event); + num--; + } + + return COMM_OK; } diff -ruN squid-2.6.STABLE4/src/comm_select.c squid-2.6.STABLE5/src/comm_select.c --- squid-2.6.STABLE4/src/comm_select.c Tue Aug 15 13:27:28 2006 +++ squid-2.6.STABLE5/src/comm_select.c Sun Oct 29 17:04:52 2006 @@ -1,6 +1,6 @@ /* - * $Id: comm_select.c,v 1.77 2006/08/15 19:27:28 hno Exp $ + * $Id: comm_select.c,v 1.79 2006/10/30 00:04:52 hno Exp $ * * DEBUG: section 5 Socket Functions * @@ -33,13 +33,16 @@ */ #include "squid.h" +#include "comm_generic.c" + +#if HAVE_SYS_TIME_H +#include +#endif #if HAVE_SYS_SELECT_H #include #endif -static int MAX_POLL_TIME = 1000; /* see also comm_quick_poll_required() */ - #ifndef howmany #define howmany(x, y) (((x)+((y)-1))/(y)) #endif @@ -49,522 +52,22 @@ #define FD_MASK_BYTES sizeof(fd_mask) #define FD_MASK_BITS (FD_MASK_BYTES*NBBY) -/* STATIC */ -static int examine_select(fd_set *, fd_set *); -static int fdIsHttp(int fd); -static int fdIsIcp(int fd); -static int fdIsDns(int fd); -static int commDeferRead(int fd); -static void checkTimeouts(void); -static OBJH commIncomingStats; -static int comm_check_incoming_select_handlers(int nfds, int *fds); -static void comm_select_dns_incoming(void); - -static struct timeval zero_tv; -static fd_set global_readfds; -static fd_set global_writefds; +static fd_set *global_readfds; +static fd_set *global_writefds; +static fd_set *current_readfds; +static fd_set *current_writefds; +static fd_set *current_errfds; static int nreadfds; static int nwritefds; -/* - * Automatic tuning for incoming requests: - * - * INCOMING sockets are the ICP and HTTP ports. We need to check these - * fairly regularly, but how often? When the load increases, we - * want to check the incoming sockets more often. If we have a lot - * of incoming ICP, then we need to check these sockets more than - * if we just have HTTP. - * - * The variables 'incoming_icp_interval' and 'incoming_http_interval' - * determine how many normal I/O events to process before checking - * incoming sockets again. Note we store the incoming_interval - * multipled by a factor of (2^INCOMING_FACTOR) to have some - * pseudo-floating point precision. - * - * The variable 'icp_io_events' and 'http_io_events' counts how many normal - * I/O events have been processed since the last check on the incoming - * sockets. When io_events > incoming_interval, its time to check incoming - * sockets. - * - * Every time we check incoming sockets, we count how many new messages - * or connections were processed. This is used to adjust the - * incoming_interval for the next iteration. The new incoming_interval - * is calculated as the current incoming_interval plus what we would - * like to see as an average number of events minus the number of - * events just processed. - * - * incoming_interval = incoming_interval + target_average - number_of_events_processed - * - * There are separate incoming_interval counters for both HTTP and ICP events - * - * You can see the current values of the incoming_interval's, as well as - * a histogram of 'incoming_events' by asking the cache manager - * for 'comm_incoming', e.g.: - * - * % ./client mgr:comm_incoming - * - * Caveats: - * - * - We have MAX_INCOMING_INTEGER as a magic upper limit on - * incoming_interval for both types of sockets. At the - * largest value the cache will effectively be idling. - * - * - The higher the INCOMING_FACTOR, the slower the algorithm will - * respond to load spikes/increases/decreases in demand. A value - * between 3 and 8 is recommended. - */ - -#define MAX_INCOMING_INTEGER 256 -#define INCOMING_FACTOR 5 -#define MAX_INCOMING_INTERVAL (MAX_INCOMING_INTEGER << INCOMING_FACTOR) -static int icp_io_events = 0; -static int dns_io_events = 0; -static int http_io_events = 0; -static int incoming_icp_interval = 16 << INCOMING_FACTOR; -static int incoming_dns_interval = 16 << INCOMING_FACTOR; -static int incoming_http_interval = 16 << INCOMING_FACTOR; -#define commCheckICPIncoming (++icp_io_events > (incoming_icp_interval>> INCOMING_FACTOR)) -#define commCheckDNSIncoming (++dns_io_events > (incoming_dns_interval>> INCOMING_FACTOR)) -#define commCheckHTTPIncoming (++http_io_events > (incoming_http_interval>> INCOMING_FACTOR)) - -static int -fdIsIcp(int fd) -{ - if (fd == theInIcpConnection) - return 1; - if (fd == theOutIcpConnection) - return 1; - return 0; -} - -static int -fdIsDns(int fd) -{ - if (fd == DnsSocket) - return 1; - return 0; -} - -static int -fdIsHttp(int fd) -{ - int j; - for (j = 0; j < NHttpSockets; j++) { - if (fd == HttpSockets[j]) - return 1; - } - return 0; -} - -#if DELAY_POOLS -static int slowfdcnt = 0; -static int slowfdarr[SQUID_MAXFD]; - -static void -commAddSlowFd(int fd) -{ - assert(slowfdcnt < SQUID_MAXFD); - slowfdarr[slowfdcnt++] = fd; -} - -static int -commGetSlowFd(void) -{ - int whichfd, retfd; - - if (!slowfdcnt) - return -1; - whichfd = squid_random() % slowfdcnt; - retfd = slowfdarr[whichfd]; - slowfdarr[whichfd] = slowfdarr[--slowfdcnt]; - return retfd; -} -#endif - -static int -comm_check_incoming_select_handlers(int nfds, int *fds) -{ - int i; - int fd; - int maxfd = 0; - fd_set read_mask; - fd_set write_mask; - FD_ZERO(&read_mask); - FD_ZERO(&write_mask); - incoming_sockets_accepted = 0; - for (i = 0; i < nfds; i++) { - fd = fds[i]; - if (fd_table[fd].read_handler) { - FD_SET(fd, &read_mask); - if (fd > maxfd) - maxfd = fd; - } - if (fd_table[fd].write_handler) { - FD_SET(fd, &write_mask); - if (fd > maxfd) - maxfd = fd; - } - } - if (maxfd++ == 0) - return -1; - getCurrentTime(); - statCounter.syscalls.selects++; - if (select(maxfd, &read_mask, &write_mask, NULL, &zero_tv) < 1) - return incoming_sockets_accepted; - for (i = 0; i < nfds; i++) { - fd = fds[i]; - if (FD_ISSET(fd, &read_mask)) { - PF *hdl = fd_table[fd].read_handler; - void *hdl_data = fd_table[fd].read_data; - commUpdateReadHandler(fd, NULL, NULL); - if (hdl) - hdl(fd, hdl_data); - else - debug(5, 1) ("comm_select_incoming: FD %d NULL read handler\n", fd); - } - if (FD_ISSET(fd, &write_mask)) { - PF *hdl = fd_table[fd].write_handler; - void *hdl_data = fd_table[fd].write_data; - commUpdateWriteHandler(fd, NULL, NULL); - if (hdl) - hdl(fd, hdl_data); - else - debug(5, 1) ("comm_select_incoming: FD %d NULL write handler\n", fd); - } - } - return incoming_sockets_accepted; -} - -static void -comm_select_icp_incoming(void) -{ - int nfds = 0; - int fds[2]; - int nevents; - icp_io_events = 0; - if (theInIcpConnection >= 0) - fds[nfds++] = theInIcpConnection; - if (theInIcpConnection != theOutIcpConnection) - if (theOutIcpConnection >= 0) - fds[nfds++] = theOutIcpConnection; - if (nfds == 0) - return; - nevents = comm_check_incoming_select_handlers(nfds, fds); - incoming_icp_interval += Config.comm_incoming.icp_average - nevents; - if (incoming_icp_interval < 0) - incoming_icp_interval = 0; - if (incoming_icp_interval > MAX_INCOMING_INTERVAL) - incoming_icp_interval = MAX_INCOMING_INTERVAL; - if (nevents > INCOMING_ICP_MAX) - nevents = INCOMING_ICP_MAX; - statHistCount(&statCounter.comm_icp_incoming, nevents); -} - -static void -comm_select_http_incoming(void) -{ - int nfds = 0; - int fds[MAXHTTPPORTS]; - int j; - int nevents; - http_io_events = 0; - for (j = 0; j < NHttpSockets; j++) { - if (HttpSockets[j] < 0) - continue; - if (commDeferRead(HttpSockets[j])) - continue; - fds[nfds++] = HttpSockets[j]; - } - nevents = comm_check_incoming_select_handlers(nfds, fds); - incoming_http_interval += Config.comm_incoming.http_average - nevents; - if (incoming_http_interval < 0) - incoming_http_interval = 0; - if (incoming_http_interval > MAX_INCOMING_INTERVAL) - incoming_http_interval = MAX_INCOMING_INTERVAL; - if (nevents > INCOMING_HTTP_MAX) - nevents = INCOMING_HTTP_MAX; - statHistCount(&statCounter.comm_http_incoming, nevents); -} - -#define DEBUG_FDBITS 0 -/* Select on all sockets; call handlers for those that are ready. */ -int -comm_select(int msec) -{ - fd_set readfds; - fd_set writefds; -#if DELAY_POOLS - fd_set slowfds; -#endif - int fd; - int maxfd; - int num; - int callicp = 0, callhttp = 0; - int calldns = 0; - int maxindex; - int k; - int j; - fd_mask *rfdsp; - fd_mask *wfdsp; - fd_mask tmask; - static time_t last_timeout = 0; - struct timeval poll_time; - double timeout = current_dtime + (msec / 1000.0); - do { - double start; - getCurrentTime(); - start = current_dtime; -#if DELAY_POOLS - FD_ZERO(&slowfds); -#endif - /* Handle any fs callbacks that need doing */ - storeDirCallback(); - if (commCheckICPIncoming) - comm_select_icp_incoming(); - if (commCheckDNSIncoming) - comm_select_dns_incoming(); - if (commCheckHTTPIncoming) - 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 */ - maxindex = howmany(maxfd, FD_MASK_BITS); - /* Note: To simplify logics we are cheating a little on pending fds - * by assuming they will be ready for either read or write to trigger - * the callback. - */ - rfdsp = (fd_mask *) & readfds; - for (j = 0; j < maxindex; j++) { - if ((tmask = rfdsp[j]) == 0) - continue; /* no bits here */ - for (k = 0; k < FD_MASK_BITS; k++) { - if (!EBIT_TEST(tmask, k)) - continue; - /* Found a set bit */ - fd = (j * FD_MASK_BITS) + k; - if (fd_table[fd].read_handler) { - switch (commDeferRead(fd)) { - case 0: - break; - case 1: - FD_CLR(fd, &readfds); - if (!fd_table[fd].write_handler) - FD_CLR(fd, &writefds); - break; -#if DELAY_POOLS - case -1: - FD_SET(fd, &slowfds); - break; -#endif - default: - fatalf("bad return value from commDeferRead(FD %d)\n", fd); - } - } - } - } - if (nreadfds + nwritefds == 0) { - assert(shutting_down); - return COMM_SHUTDOWN; - } - if (msec > MAX_POLL_TIME) - msec = MAX_POLL_TIME; - for (;;) { - poll_time.tv_sec = msec / 1000; - poll_time.tv_usec = (msec % 1000) * 1000; - statCounter.syscalls.selects++; - num = select(maxfd, &readfds, &writefds, NULL, &poll_time); - statCounter.select_loops++; - if (num >= 0) - break; - if (ignoreErrno(errno)) - break; - debug(5, 0) ("comm_select: select failure: %s\n", - xstrerror()); - examine_select(&readfds, &writefds); - return COMM_ERROR; - /* NOTREACHED */ - } - if (num < 0) - continue; - debug(5, num ? 5 : 8) ("comm_select: %d FDs ready at %d\n", - num, (int) squid_curtime); - statHistCount(&statCounter.select_fds_hist, num); - /* Check lifetime and timeout handlers ONCE each second. - * Replaces brain-dead check every time through the loop! */ - if (squid_curtime > last_timeout) { - last_timeout = squid_curtime; - checkTimeouts(); - } - if (num == 0) - continue; - /* Scan return fd masks for ready descriptors */ - rfdsp = (fd_mask *) & readfds; - wfdsp = (fd_mask *) & writefds; - maxindex = howmany(maxfd, FD_MASK_BITS); - for (j = 0; j < maxindex; j++) { - if ((tmask = (rfdsp[j] | wfdsp[j])) == 0) - continue; /* no bits here */ - for (k = 0; k < FD_MASK_BITS; k++) { - fde *F; - if (tmask == 0) - break; /* no more bits left */ - if (!EBIT_TEST(tmask, k)) - continue; - /* Found a set bit */ - fd = (j * FD_MASK_BITS) + k; - EBIT_CLR(tmask, k); /* this will be done */ - if (fdIsIcp(fd)) { - callicp = 1; - continue; - } - if (fdIsDns(fd)) { - calldns = 1; - continue; - } - if (fdIsHttp(fd)) { - callhttp = 1; - continue; - } - F = &fd_table[fd]; - debug(5, 6) ("comm_select: FD %d ready for %s%s\n", fd, - FD_ISSET(fd, &readfds) ? "read" : "", - FD_ISSET(fd, &writefds) ? "write" : ""); - if (F->read_handler) { - int do_read = 0; - switch (F->read_pending) { - case COMM_PENDING_NORMAL: - case COMM_PENDING_WANTS_READ: - do_read = FD_ISSET(fd, &readfds); - break; - case COMM_PENDING_WANTS_WRITE: - do_read = FD_ISSET(fd, &writefds); - break; - case COMM_PENDING_NOW: - do_read = 1; - break; - } -#if DELAY_POOLS - if (do_read && FD_ISSET(fd, &slowfds)) - commAddSlowFd(fd); - else -#endif - if (do_read) { - PF *hdl = F->read_handler; - void *hdl_data = F->read_data; - debug(5, 6) ("comm_select: FD %d calling read_handler %p(%p)\n", fd, hdl, hdl_data); - commUpdateReadHandler(fd, NULL, NULL); - hdl(fd, hdl_data); - statCounter.select_fds++; - if (commCheckICPIncoming) - comm_select_icp_incoming(); - if (commCheckDNSIncoming) - comm_select_dns_incoming(); - if (commCheckHTTPIncoming) - comm_select_http_incoming(); - } - } - if (F->write_handler) { - int do_write = 0; - switch (F->write_pending) { - case COMM_PENDING_WANTS_READ: - do_write = FD_ISSET(fd, &readfds); - break; - case COMM_PENDING_NORMAL: - case COMM_PENDING_WANTS_WRITE: - do_write = FD_ISSET(fd, &writefds); - break; - case COMM_PENDING_NOW: - do_write = 1; - break; - } - if (do_write) { - PF *hdl = F->write_handler; - void *hdl_data = F->write_data; - debug(5, 6) ("comm_select: FD %d calling write_handler %p(%p)\n", fd, hdl, hdl_data); - commUpdateWriteHandler(fd, NULL, NULL); - hdl(fd, hdl_data); - statCounter.select_fds++; - if (commCheckICPIncoming) - comm_select_icp_incoming(); - if (commCheckDNSIncoming) - comm_select_dns_incoming(); - if (commCheckHTTPIncoming) - comm_select_http_incoming(); - } - } - } - } - if (callicp) - comm_select_icp_incoming(); - if (calldns) - comm_select_dns_incoming(); - if (callhttp) - comm_select_http_incoming(); -#if DELAY_POOLS - while ((fd = commGetSlowFd()) != -1) { - fde *F = &fd_table[fd]; - PF *hdl = F->read_handler; - void *hdl_data = F->read_data; - debug(5, 6) ("comm_select: slow FD %d selected for reading\n", fd); - if (hdl) { - commUpdateReadHandler(fd, NULL, NULL); - hdl(fd, hdl_data); - statCounter.select_fds++; - if (commCheckICPIncoming) - comm_select_icp_incoming(); - if (commCheckDNSIncoming) - comm_select_dns_incoming(); - if (commCheckHTTPIncoming) - comm_select_http_incoming(); - } - } -#endif - getCurrentTime(); - statCounter.select_time += (current_dtime - start); - return COMM_OK; - } - while (timeout > current_dtime); - debug(5, 8) ("comm_select: time out: %d\n", (int) squid_curtime); - return COMM_TIMEOUT; -} - static void -comm_select_dns_incoming(void) -{ - int nfds = 0; - int fds[2]; - int nevents; - dns_io_events = 0; - if (DnsSocket < 0) - return; - fds[nfds++] = DnsSocket; - nevents = comm_check_incoming_select_handlers(nfds, fds); - if (nevents < 0) - return; - incoming_dns_interval += Config.comm_incoming.dns_average - nevents; - if (incoming_dns_interval < Config.comm_incoming.dns_min_poll) - incoming_dns_interval = Config.comm_incoming.dns_min_poll; - if (incoming_dns_interval > MAX_INCOMING_INTERVAL) - incoming_dns_interval = MAX_INCOMING_INTERVAL; - if (nevents > INCOMING_DNS_MAX) - nevents = INCOMING_DNS_MAX; - statHistCount(&statCounter.comm_dns_incoming, nevents); -} - -void -comm_select_init(void) +do_select_init() { - zero_tv.tv_sec = 0; - zero_tv.tv_usec = 0; - cachemgrRegister("comm_incoming", - "comm_incoming() stats", - commIncomingStats, 0, 1); - FD_ZERO(&global_readfds); - FD_ZERO(&global_writefds); + global_readfds = xcalloc(FD_MASK_BYTES, howmany(Squid_MaxFD, FD_MASK_BITS)); + global_writefds = xcalloc(FD_MASK_BYTES, howmany(Squid_MaxFD, FD_MASK_BITS)); + current_readfds = xcalloc(FD_MASK_BYTES, howmany(Squid_MaxFD, FD_MASK_BITS)); + current_writefds = xcalloc(FD_MASK_BYTES, howmany(Squid_MaxFD, FD_MASK_BITS)); + current_errfds = xcalloc(FD_MASK_BYTES, howmany(Squid_MaxFD, FD_MASK_BITS)); nreadfds = nwritefds = 0; } @@ -574,9 +77,14 @@ debug(5, 1) ("Using select for the IO loop\n"); } -void -comm_select_shutdown(void) +static void +do_select_shutdown() { + safe_free(global_readfds); + safe_free(global_writefds); + safe_free(current_readfds); + safe_free(current_writefds); + safe_free(current_errfds); } void @@ -585,165 +93,78 @@ storeAppendPrintf(sentry, "\tIO loop method: select\n"); } -/* - * examine_select - debug routine. - * - * I spend the day chasing this core dump that occurs when both the client - * and the server side of a cache fetch simultaneoulsy abort the - * connection. While I haven't really studied the code to figure out how - * it happens, the snippet below may prevent the cache from exitting: - * - * Call this from where the select loop fails. - */ -static int -examine_select(fd_set * readfds, fd_set * writefds) -{ - int fd = 0; - fd_set read_x; - fd_set write_x; - struct timeval tv; - close_handler *ch = NULL; - fde *F = NULL; - struct stat sb; - debug(5, 0) ("examine_select: Examining open file descriptors...\n"); - for (fd = 0; fd < Squid_MaxFD; fd++) { - FD_ZERO(&read_x); - FD_ZERO(&write_x); - tv.tv_sec = tv.tv_usec = 0; - if (FD_ISSET(fd, readfds)) - FD_SET(fd, &read_x); - else if (FD_ISSET(fd, writefds)) - FD_SET(fd, &write_x); - else - continue; - statCounter.syscalls.selects++; - errno = 0; - if (!fstat(fd, &sb)) { - debug(5, 5) ("FD %d is valid.\n", fd); - continue; - } - F = &fd_table[fd]; - debug(5, 0) ("FD %d: %s\n", fd, xstrerror()); - debug(5, 0) ("WARNING: FD %d has handlers, but it's invalid.\n", fd); - debug(5, 0) ("FD %d is a %s called '%s'\n", - fd, - fdTypeStr[F->type], - F->desc); - debug(5, 0) ("tmout:%p read:%p write:%p\n", - F->timeout_handler, - F->read_handler, - F->write_handler); - for (ch = F->close_handler; ch; ch = ch->next) - debug(5, 0) (" close handler: %p\n", ch->handler); - if (F->close_handler) { - commCallCloseHandlers(fd); - } else if (F->timeout_handler) { - debug(5, 0) ("examine_select: Calling Timeout Handler\n"); - F->timeout_handler(fd, F->timeout_data); - } - F->close_handler = NULL; - F->timeout_handler = NULL; - F->read_handler = NULL; - F->write_handler = NULL; - FD_CLR(fd, readfds); - FD_CLR(fd, writefds); - } - return 0; -} - -static void -commIncomingStats(StoreEntry * sentry) -{ - StatCounters *f = &statCounter; - storeAppendPrintf(sentry, "Current incoming_icp_interval: %d\n", - incoming_icp_interval >> INCOMING_FACTOR); - storeAppendPrintf(sentry, "Current incoming_dns_interval: %d\n", - incoming_dns_interval >> INCOMING_FACTOR); - storeAppendPrintf(sentry, "Current incoming_http_interval: %d\n", - incoming_http_interval >> INCOMING_FACTOR); - storeAppendPrintf(sentry, "\n"); - storeAppendPrintf(sentry, "Histogram of events per incoming socket type\n"); - storeAppendPrintf(sentry, "ICP Messages handled per comm_select_icp_incoming() call:\n"); - statHistDump(&f->comm_icp_incoming, sentry, statHistIntDumper); - storeAppendPrintf(sentry, "DNS Messages handled per comm_select_dns_incoming() call:\n"); - statHistDump(&f->comm_dns_incoming, sentry, statHistIntDumper); - storeAppendPrintf(sentry, "HTTP Messages handled per comm_select_http_incoming() call:\n"); - statHistDump(&f->comm_http_incoming, sentry, statHistIntDumper); -} - void commSetEvents(int fd, int need_read, int need_write) { - if (need_read && !FD_ISSET(fd, &global_readfds)) { - FD_SET(fd, &global_readfds); + if (need_read && !FD_ISSET(fd, global_readfds)) { + FD_SET(fd, global_readfds); nreadfds++; - } else if (!need_read && FD_ISSET(fd, &global_readfds)) { - FD_CLR(fd, &global_readfds); + } else if (!need_read && FD_ISSET(fd, global_readfds)) { + FD_CLR(fd, global_readfds); nreadfds--; } - if (need_write && !FD_ISSET(fd, &global_writefds)) { - FD_SET(fd, &global_writefds); + if (need_write && !FD_ISSET(fd, global_writefds)) { + FD_SET(fd, global_writefds); nwritefds++; - } else if (!need_write && FD_ISSET(fd, &global_writefds)) { - FD_CLR(fd, &global_writefds); + } else if (!need_write && FD_ISSET(fd, global_writefds)) { + FD_CLR(fd, global_writefds); nwritefds--; } } static int -commDeferRead(int fd) +do_comm_select(int msec) { - fde *F = &fd_table[fd]; - if (F->defer_check == NULL) - return 0; - return F->defer_check(fd, F->defer_data); -} - -static void -checkTimeouts(void) -{ - int fd; - fde *F = NULL; - PF *callback; - for (fd = 0; fd <= Biggest_FD; fd++) { - F = &fd_table[fd]; - if (!F->flags.open) - continue; - if (F->timeout == 0) - continue; - if (F->timeout > squid_curtime) - continue; - debug(5, 5) ("checkTimeouts: FD %d Expired\n", fd); - if (F->timeout_handler) { - debug(5, 5) ("checkTimeouts: FD %d: Call timeout handler\n", fd); - callback = F->timeout_handler; - F->timeout_handler = NULL; - callback(fd, F->timeout_data); - } else { - debug(5, 5) ("checkTimeouts: FD %d: Forcing comm_close()\n", fd); - comm_close(fd); - } - } -} + int num; + struct timeval tv; + fd_mask *rfdsp = (fd_mask *) current_readfds; + fd_mask *wfdsp = (fd_mask *) current_writefds; + fd_mask *efdsp = (fd_mask *) current_errfds; + int maxindex = howmany(Biggest_FD + 1, FD_MASK_BITS); + int fd_set_size = maxindex * FD_MASK_BYTES; + int j; + if (nreadfds + nwritefds == 0) { + assert(shutting_down); + return COMM_SHUTDOWN; + } + memcpy(current_readfds, global_readfds, fd_set_size); + memcpy(current_writefds, global_writefds, fd_set_size); + memcpy(current_errfds, global_writefds, fd_set_size); + tv.tv_sec = msec / 1000; + tv.tv_usec = (msec % 1000) * 1000; + statCounter.syscalls.selects++; + num = select(Biggest_FD + 1, current_readfds, current_writefds, current_errfds, &tv); + statCounter.select_loops++; -/* Called by async-io or diskd to speed up the polling */ -void -comm_quick_poll_required(void) -{ - MAX_POLL_TIME = 10; -} + if (num < 0) { + getCurrentTime(); + if (ignoreErrno(errno)) + return COMM_OK; -/* Defer reads from this fd */ -void -commDeferFD(int fd) -{ - /* Not implemented */ -} + debug(5, 1) ("comm_select: select failure: %s\n", xstrerror()); + return COMM_ERROR; + } + statHistCount(&statCounter.select_fds_hist, num); -/* Resume reading from the given fd */ -void -commResumeFD(int fd) -{ - /* Not implemented */ + if (num == 0) + return COMM_TIMEOUT; + + for (j = 0; j < maxindex; j++) { + int k; + fd_mask tmask = rfdsp[j] | wfdsp[j] | efdsp[j]; + for (k = 0; tmask && k < FD_MASK_BITS; k++) { + int fd; + int read_event, write_event; + if (!EBIT_TEST(tmask, k)) + continue; + /* Found a set bit */ + fd = (j * FD_MASK_BITS) + k; + read_event = FD_ISSET(fd, current_readfds); + write_event = FD_ISSET(fd, current_writefds) | FD_ISSET(fd, current_errfds); + EBIT_CLR(tmask, k); /* this will be done */ + comm_call_handlers(fd, read_event, write_event); + } + } + return COMM_OK; } diff -ruN squid-2.6.STABLE4/src/comm_select_simple.c squid-2.6.STABLE5/src/comm_select_simple.c --- squid-2.6.STABLE4/src/comm_select_simple.c Wed Dec 31 17:00:00 1969 +++ squid-2.6.STABLE5/src/comm_select_simple.c Fri Nov 3 05:30:40 2006 @@ -0,0 +1,138 @@ + +/* + * $Id: comm_select_simple.c,v 1.2 2006/11/03 12:30:40 hno Exp $ + * + * DEBUG: section 5 Socket Functions + * + * SQUID Web Proxy Cache http://www.squid-cache.org/ + * ---------------------------------------------------------- + * + * Squid is the result of efforts by numerous individuals from + * the Internet community; see the CONTRIBUTORS file for full + * details. Many organizations have provided support for Squid's + * development; see the SPONSORS file for full details. Squid is + * Copyrighted (C) 2001 by the Regents of the University of + * California; see the COPYRIGHT file for full details. Squid + * incorporates software developed and/or copyrighted by other + * sources; see the CREDITS file for full details. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. + * + */ + +#include "squid.h" +#include "comm_generic.c" + +#if HAVE_SYS_TIME_H +#include +#endif + +#if HAVE_SYS_SELECT_H +#include +#endif + +static fd_set global_readfds; +static fd_set global_writefds; +static int nreadfds; +static int nwritefds; + +static void +do_select_init() +{ + if (Squid_MaxFD > FD_SETSIZE) + Squid_MaxFD = FD_SETSIZE; + nreadfds = nwritefds = 0; +} + +void +comm_select_postinit() +{ + debug(5, 1) ("Using select in POSIX mode for the IO loop\n"); +} + +static void +do_select_shutdown() +{ +} + +void +comm_select_status(StoreEntry * sentry) +{ + storeAppendPrintf(sentry, "\tIO loop method: select in POSIX mode\n"); +} + +void +commSetEvents(int fd, int need_read, int need_write) +{ + if (need_read && !FD_ISSET(fd, &global_readfds)) { + FD_SET(fd, &global_readfds); + nreadfds++; + } else if (!need_read && FD_ISSET(fd, &global_readfds)) { + FD_CLR(fd, &global_readfds); + nreadfds--; + } + if (need_write && !FD_ISSET(fd, &global_writefds)) { + FD_SET(fd, &global_writefds); + nwritefds++; + } else if (!need_write && FD_ISSET(fd, &global_writefds)) { + FD_CLR(fd, &global_writefds); + nwritefds--; + } +} + +static int +do_comm_select(int msec) +{ + int num; + struct timeval tv; + fd_set readfds; + fd_set writefds; + fd_set errfds; + int fd; + + if (nreadfds + nwritefds == 0) { + assert(shutting_down); + return COMM_SHUTDOWN; + } + memcpy(&readfds, &global_readfds, sizeof(fd_set)); + memcpy(&writefds, &global_writefds, sizeof(fd_set)); + memcpy(&errfds, &global_writefds, sizeof(fd_set)); + tv.tv_sec = msec / 1000; + tv.tv_usec = (msec % 1000) * 1000; + statCounter.syscalls.selects++; + num = select(Biggest_FD + 1, &readfds, &writefds, &errfds, &tv); + statCounter.select_loops++; + + if (num < 0) { + getCurrentTime(); + if (ignoreErrno(errno)) + return COMM_OK; + + debug(5, 1) ("comm_select: select failure: %s\n", xstrerror()); + return COMM_ERROR; + } + statHistCount(&statCounter.select_fds_hist, num); + + if (num == 0) + return COMM_TIMEOUT; + + for (fd = 0; fd <= Biggest_FD; fd++) { + int read_event = FD_ISSET(fd, &readfds); + int write_event = FD_ISSET(fd, &writefds) || FD_ISSET(fd, &errfds); + if (read_event || write_event) + comm_call_handlers(fd, read_event, write_event); + } + return COMM_OK; +} diff -ruN squid-2.6.STABLE4/src/comm_select_win32.c squid-2.6.STABLE5/src/comm_select_win32.c --- squid-2.6.STABLE4/src/comm_select_win32.c Tue Aug 15 14:28:20 2006 +++ squid-2.6.STABLE5/src/comm_select_win32.c Sat Oct 28 11:08:16 2006 @@ -1,6 +1,6 @@ /* - * $Id: comm_select_win32.c,v 1.2 2006/08/15 20:28:20 serassio Exp $ + * $Id: comm_select_win32.c,v 1.6 2006/10/28 17:08:16 serassio Exp $ * * DEBUG: section 5 Socket Functions * @@ -33,576 +33,23 @@ */ #include "squid.h" +#include "comm_generic.c" -static int MAX_POLL_TIME = 1000; /* see also comm_quick_poll_required() */ +#if HAVE_WINSOCK2_H +#include +#endif -/* STATIC */ -static int examine_select(fd_set *, fd_set *); -static int fdIsHttp(int fd); -static int fdIsIcp(int fd); -static int fdIsDns(int fd); -static int commDeferRead(int fd); -static void checkTimeouts(void); -static OBJH commIncomingStats; -static int comm_check_incoming_select_handlers(int nfds, int *fds); -static void comm_select_dns_incoming(void); -static struct timeval zero_tv; static fd_set global_readfds; static fd_set global_writefds; static int nreadfds; static int nwritefds; -/* - * Automatic tuning for incoming requests: - * - * INCOMING sockets are the ICP and HTTP ports. We need to check these - * fairly regularly, but how often? When the load increases, we - * want to check the incoming sockets more often. If we have a lot - * of incoming ICP, then we need to check these sockets more than - * if we just have HTTP. - * - * The variables 'incoming_icp_interval' and 'incoming_http_interval' - * determine how many normal I/O events to process before checking - * incoming sockets again. Note we store the incoming_interval - * multipled by a factor of (2^INCOMING_FACTOR) to have some - * pseudo-floating point precision. - * - * The variable 'icp_io_events' and 'http_io_events' counts how many normal - * I/O events have been processed since the last check on the incoming - * sockets. When io_events > incoming_interval, its time to check incoming - * sockets. - * - * Every time we check incoming sockets, we count how many new messages - * or connections were processed. This is used to adjust the - * incoming_interval for the next iteration. The new incoming_interval - * is calculated as the current incoming_interval plus what we would - * like to see as an average number of events minus the number of - * events just processed. - * - * incoming_interval = incoming_interval + target_average - number_of_events_processed - * - * There are separate incoming_interval counters for both HTTP and ICP events - * - * You can see the current values of the incoming_interval's, as well as - * a histogram of 'incoming_events' by asking the cache manager - * for 'comm_incoming', e.g.: - * - * % ./client mgr:comm_incoming - * - * Caveats: - * - * - We have MAX_INCOMING_INTEGER as a magic upper limit on - * incoming_interval for both types of sockets. At the - * largest value the cache will effectively be idling. - * - * - The higher the INCOMING_FACTOR, the slower the algorithm will - * respond to load spikes/increases/decreases in demand. A value - * between 3 and 8 is recommended. - */ - -#define MAX_INCOMING_INTEGER 256 -#define INCOMING_FACTOR 5 -#define MAX_INCOMING_INTERVAL (MAX_INCOMING_INTEGER << INCOMING_FACTOR) -static int icp_io_events = 0; -static int dns_io_events = 0; -static int http_io_events = 0; -static int incoming_icp_interval = 16 << INCOMING_FACTOR; -static int incoming_dns_interval = 16 << INCOMING_FACTOR; -static int incoming_http_interval = 16 << INCOMING_FACTOR; -#define commCheckICPIncoming (++icp_io_events > (incoming_icp_interval>> INCOMING_FACTOR)) -#define commCheckDNSIncoming (++dns_io_events > (incoming_dns_interval>> INCOMING_FACTOR)) -#define commCheckHTTPIncoming (++http_io_events > (incoming_http_interval>> INCOMING_FACTOR)) - -static int -fdIsIcp(int fd) -{ - if (fd == theInIcpConnection) - return 1; - if (fd == theOutIcpConnection) - return 1; - return 0; -} - -static int -fdIsDns(int fd) -{ - if (fd == DnsSocket) - return 1; - return 0; -} - -static int -fdIsHttp(int fd) -{ - int j; - for (j = 0; j < NHttpSockets; j++) { - if (fd == HttpSockets[j]) - return 1; - } - return 0; -} - -#if DELAY_POOLS -static int slowfdcnt = 0; -static int slowfdarr[SQUID_MAXFD]; - -static void -commAddSlowFd(int fd) -{ - assert(slowfdcnt < SQUID_MAXFD); - slowfdarr[slowfdcnt++] = fd; -} - -static int -commGetSlowFd(void) -{ - int whichfd, retfd; - - if (!slowfdcnt) - return -1; - whichfd = squid_random() % slowfdcnt; - retfd = slowfdarr[whichfd]; - slowfdarr[whichfd] = slowfdarr[--slowfdcnt]; - return retfd; -} -#endif - -static int -comm_check_incoming_select_handlers(int nfds, int *fds) -{ - int i; - int fd; - int maxfd = 0; - fd_set read_mask; - fd_set write_mask; - fd_set errfds; - FD_ZERO(&errfds); - FD_ZERO(&read_mask); - FD_ZERO(&write_mask); - incoming_sockets_accepted = 0; - for (i = 0; i < nfds; i++) { - fd = fds[i]; - if (fd_table[fd].read_handler) { - FD_SET(fd, &read_mask); - if (fd > maxfd) - maxfd = fd; - } - if (fd_table[fd].write_handler) { - FD_SET(fd, &write_mask); - if (fd > maxfd) - maxfd = fd; - } - } - if (maxfd++ == 0) - return -1; - getCurrentTime(); - statCounter.syscalls.selects++; - if (select(maxfd, &read_mask, &write_mask, &errfds, &zero_tv) < 1) - return incoming_sockets_accepted; - for (i = 0; i < nfds; i++) { - fd = fds[i]; - if (__WSAFDIsSet(fd_table[fd].win32.handle, &read_mask)) { - PF *hdl = fd_table[fd].read_handler; - void *hdl_data = fd_table[fd].read_data; - commUpdateReadHandler(fd, NULL, NULL); - if (hdl) - hdl(fd, hdl_data); - else - debug(5, 1) ("comm_select_incoming: FD %d NULL read handler\n", fd); - } - if (__WSAFDIsSet(fd_table[fd].win32.handle, &write_mask)) { - PF *hdl = fd_table[fd].write_handler; - void *hdl_data = fd_table[fd].write_data; - commUpdateWriteHandler(fd, NULL, NULL); - if (hdl) - hdl(fd, hdl_data); - else - debug(5, 1) ("comm_select_incoming: FD %d NULL write handler\n", fd); - } - } - return incoming_sockets_accepted; -} - -static void -comm_select_icp_incoming(void) -{ - int nfds = 0; - int fds[2]; - int nevents; - icp_io_events = 0; - if (theInIcpConnection >= 0) - fds[nfds++] = theInIcpConnection; - if (theInIcpConnection != theOutIcpConnection) - if (theOutIcpConnection >= 0) - fds[nfds++] = theOutIcpConnection; - if (nfds == 0) - return; - nevents = comm_check_incoming_select_handlers(nfds, fds); - incoming_icp_interval += Config.comm_incoming.icp_average - nevents; - if (incoming_icp_interval < 0) - incoming_icp_interval = 0; - if (incoming_icp_interval > MAX_INCOMING_INTERVAL) - incoming_icp_interval = MAX_INCOMING_INTERVAL; - if (nevents > INCOMING_ICP_MAX) - nevents = INCOMING_ICP_MAX; - statHistCount(&statCounter.comm_icp_incoming, nevents); -} - -static void -comm_select_http_incoming(void) -{ - int nfds = 0; - int fds[MAXHTTPPORTS]; - int j; - int nevents; - http_io_events = 0; - for (j = 0; j < NHttpSockets; j++) { - if (HttpSockets[j] < 0) - continue; - if (commDeferRead(HttpSockets[j])) - continue; - fds[nfds++] = HttpSockets[j]; - } - nevents = comm_check_incoming_select_handlers(nfds, fds); - incoming_http_interval += Config.comm_incoming.http_average - nevents; - if (incoming_http_interval < 0) - incoming_http_interval = 0; - if (incoming_http_interval > MAX_INCOMING_INTERVAL) - incoming_http_interval = MAX_INCOMING_INTERVAL; - if (nevents > INCOMING_HTTP_MAX) - nevents = INCOMING_HTTP_MAX; - statHistCount(&statCounter.comm_http_incoming, nevents); -} - -/* Select on all sockets; call handlers for those that are ready. */ -int -comm_select(int msec) -{ - fd_set readfds; - fd_set writefds; -#if DELAY_POOLS - fd_set slowfds; -#endif - int fd; - int maxfd; - int num; - int callicp = 0, callhttp = 0; - int calldns = 0; - register int j; - static time_t last_timeout = 0; - struct timeval poll_time; - double timeout = current_dtime + (msec / 1000.0); - int no_bits; - fd_set errfds; - FD_ZERO(&errfds); - do { - double start; - getCurrentTime(); - start = current_dtime; -#if DELAY_POOLS - FD_ZERO(&slowfds); -#endif - /* Handle any fs callbacks that need doing */ - storeDirCallback(); - if (commCheckICPIncoming) - comm_select_icp_incoming(); - if (commCheckDNSIncoming) - comm_select_dns_incoming(); - if (commCheckHTTPIncoming) - comm_select_http_incoming(); - callicp = calldns = callhttp = 0; - maxfd = Biggest_FD + 1; - xmemcpy(&readfds, &global_readfds, sizeof(global_readfds)); - xmemcpy(&writefds, &global_writefds, sizeof(global_writefds)); - xmemcpy(&errfds, &global_writefds, sizeof(global_writefds)); - /* remove stalled FDs, and deal with pending descriptors */ - for (j = 0; j < (int) readfds.fd_count; j++) { - register int readfds_handle = readfds.fd_array[j]; - no_bits = 1; - for (fd = Biggest_FD; fd; fd--) { - if (fd_table[fd].win32.handle == readfds_handle) { - if (fd_table[fd].flags.open) { - no_bits = 0; - break; - } - } - } - if (no_bits) - continue; - if (fd_table[fd].read_handler) { - switch (commDeferRead(fd)) { - case 0: - break; - case 1: - FD_CLR(fd, &readfds); - /* FD_CLR() decrements readfds.fd_count, so we must */ - /* decrement too the counter j */ - j--; - if (!fd_table[fd].write_handler) - FD_CLR(fd, &writefds); - break; -#if DELAY_POOLS - case -1: - FD_SET(fd, &slowfds); - break; -#endif - default: - fatalf("bad return value from commDeferRead(FD %d)\n", fd); - } - } - } - if (nreadfds + nwritefds == 0) { - assert(shutting_down); - return COMM_SHUTDOWN; - } - if (msec > MAX_POLL_TIME) - msec = MAX_POLL_TIME; - for (;;) { - poll_time.tv_sec = msec / 1000; - poll_time.tv_usec = (msec % 1000) * 1000; - statCounter.syscalls.selects++; - num = select(maxfd, &readfds, &writefds, &errfds, &poll_time); - statCounter.select_loops++; - if (num >= 0) - break; - if (ignoreErrno(errno)) - break; - debug(5, 0) ("comm_select: select failure: %s\n", - xstrerror()); - examine_select(&readfds, &writefds); - return COMM_ERROR; - /* NOTREACHED */ - } - if (num < 0) - continue; - debug(5, num ? 5 : 8) ("comm_select: %d FDs ready at %d\n", - num, (int) squid_curtime); - statHistCount(&statCounter.select_fds_hist, num); - /* Check lifetime and timeout handlers ONCE each second. - * Replaces brain-dead check every time through the loop! */ - if (squid_curtime > last_timeout) { - last_timeout = squid_curtime; - checkTimeouts(); - } - if (num == 0) - continue; - /* Scan return fd masks for ready for read descriptors */ - assert(readfds.fd_count <= (unsigned int) Biggest_FD); - for (j = 0; j < (int) readfds.fd_count; j++) { - register int readfds_handle = readfds.fd_array[j]; - register int osfhandle; - fde *F; - no_bits = 1; - for (fd = Biggest_FD; fd; fd--) { - osfhandle = fd_table[fd].win32.handle; - if (osfhandle == readfds_handle) { - if (fd_table[fd].flags.open) { - no_bits = 0; - break; - } - } - } - if (no_bits) - continue; - if (fdIsIcp(fd)) { - callicp = 1; - continue; - } - if (fdIsDns(fd)) { - calldns = 1; - continue; - } - if (fdIsHttp(fd)) { - callhttp = 1; - continue; - } - F = &fd_table[fd]; - debug(5, 6) ("comm_select: FD %d ready for read\n", fd); - if (F->read_handler) { - int do_read = 0; - switch (F->read_pending) { - case COMM_PENDING_NORMAL: - case COMM_PENDING_WANTS_READ: - do_read = 1; - break; - case COMM_PENDING_WANTS_WRITE: - do_read = __WSAFDIsSet(fd_table[fd].win32.handle, &writefds); - break; - case COMM_PENDING_NOW: - do_read = 1; - break; - } -#if DELAY_POOLS - if (do_read && __WSAFDIsSet(fd_table[fd].win32.handle, &slowfds)) - commAddSlowFd(fd); - else -#endif - if (do_read) { - PF *hdl = F->read_handler; - void *hdl_data = F->read_data; - debug(5, 6) ("comm_select: FD %d calling read_handler %p(%p)\n", fd, hdl, hdl_data); - commUpdateReadHandler(fd, NULL, NULL); - hdl(fd, hdl_data); - statCounter.select_fds++; - if (commCheckICPIncoming) - comm_select_icp_incoming(); - if (commCheckDNSIncoming) - comm_select_dns_incoming(); - if (commCheckHTTPIncoming) - comm_select_http_incoming(); - } - } - } - /* Scan return fd masks for error on connect() descriptors */ - assert(errfds.fd_count <= (unsigned int) Biggest_FD); - for (j = 0; j < (int) errfds.fd_count; j++) { - register int errfds_handle = errfds.fd_array[j]; - for (fd = Biggest_FD; fd; fd--) { - if (fd_table[fd].win32.handle == errfds_handle) { - if (fd_table[fd].flags.open) { - fde *F = &fd_table[fd]; - if (F->write_handler) { - PF *hdl = F->write_handler; - void *hdl_data = F->write_data; - commUpdateWriteHandler(fd, NULL, NULL); - hdl(fd, hdl_data); - statCounter.select_fds++; - } - } - break; - } - } - } - /* Scan return fd masks for ready for write descriptors */ - assert(writefds.fd_count <= (unsigned int) Biggest_FD); - for (j = 0; j < (int) writefds.fd_count; j++) { - register int writefds_handle = writefds.fd_array[j]; - register int osfhandle; - fde *F; - no_bits = 1; - for (fd = Biggest_FD; fd; fd--) { - osfhandle = fd_table[fd].win32.handle; - if (osfhandle == writefds_handle) { - if (fd_table[fd].flags.open) { - no_bits = 0; - break; - } - } - } - if (no_bits) - continue; - if (fdIsIcp(fd)) { - callicp = 1; - continue; - } - if (fdIsDns(fd)) { - calldns = 1; - continue; - } - if (fdIsHttp(fd)) { - callhttp = 1; - continue; - } - F = &fd_table[fd]; - debug(5, 6) ("comm_select: FD %d ready for write\n", fd); - if (F->write_handler) { - int do_write = 0; - switch (F->write_pending) { - case COMM_PENDING_WANTS_READ: - do_write = __WSAFDIsSet(fd_table[fd].win32.handle, &readfds); - break; - case COMM_PENDING_NORMAL: - case COMM_PENDING_WANTS_WRITE: - do_write = 1; - break; - case COMM_PENDING_NOW: - do_write = 1; - break; - } - if (do_write) { - PF *hdl = F->write_handler; - void *hdl_data = F->write_data; - debug(5, 6) ("comm_select: FD %d calling write_handler %p(%p)\n", fd, hdl, hdl_data); - commUpdateWriteHandler(fd, NULL, NULL); - hdl(fd, hdl_data); - statCounter.select_fds++; - if (commCheckICPIncoming) - comm_select_icp_incoming(); - if (commCheckDNSIncoming) - comm_select_dns_incoming(); - if (commCheckHTTPIncoming) - comm_select_http_incoming(); - } - } - } - if (callicp) - comm_select_icp_incoming(); - if (calldns) - comm_select_dns_incoming(); - if (callhttp) - comm_select_http_incoming(); -#if DELAY_POOLS - while ((fd = commGetSlowFd()) != -1) { - fde *F = &fd_table[fd]; - PF *hdl = F->read_handler; - void *hdl_data = F->read_data; - debug(5, 6) ("comm_select: slow FD %d selected for reading\n", fd); - if (hdl) { - commUpdateReadHandler(fd, NULL, NULL); - hdl(fd, hdl_data); - statCounter.select_fds++; - if (commCheckICPIncoming) - comm_select_icp_incoming(); - if (commCheckDNSIncoming) - comm_select_dns_incoming(); - if (commCheckHTTPIncoming) - comm_select_http_incoming(); - } - } -#endif - getCurrentTime(); - statCounter.select_time += (current_dtime - start); - return COMM_OK; - } - while (timeout > current_dtime); - debug(5, 8) ("comm_select: time out: %d\n", (int) squid_curtime); - return COMM_TIMEOUT; -} - static void -comm_select_dns_incoming(void) +do_select_init() { - int nfds = 0; - int fds[2]; - int nevents; - dns_io_events = 0; - if (DnsSocket < 0) - return; - fds[nfds++] = DnsSocket; - nevents = comm_check_incoming_select_handlers(nfds, fds); - if (nevents < 0) - return; - incoming_dns_interval += Config.comm_incoming.dns_average - nevents; - if (incoming_dns_interval < Config.comm_incoming.dns_min_poll) - incoming_dns_interval = Config.comm_incoming.dns_min_poll; - if (incoming_dns_interval > MAX_INCOMING_INTERVAL) - incoming_dns_interval = MAX_INCOMING_INTERVAL; - if (nevents > INCOMING_DNS_MAX) - nevents = INCOMING_DNS_MAX; - statHistCount(&statCounter.comm_dns_incoming, nevents); -} - -void -comm_select_init(void) -{ - zero_tv.tv_sec = 0; - zero_tv.tv_usec = 0; - cachemgrRegister("comm_incoming", - "comm_incoming() stats", - commIncomingStats, 0, 1); - FD_ZERO(&global_readfds); - FD_ZERO(&global_writefds); + if (Squid_MaxFD > FD_SETSIZE) + Squid_MaxFD = FD_SETSIZE; nreadfds = nwritefds = 0; } @@ -612,8 +59,8 @@ debug(5, 1) ("Using select for the IO loop\n"); } -void -comm_select_shutdown(void) +static void +do_select_shutdown() { } @@ -623,92 +70,6 @@ storeAppendPrintf(sentry, "\tIO loop method: select\n"); } -/* - * examine_select - debug routine. - * - * I spend the day chasing this core dump that occurs when both the client - * and the server side of a cache fetch simultaneoulsy abort the - * connection. While I haven't really studied the code to figure out how - * it happens, the snippet below may prevent the cache from exitting: - * - * Call this from where the select loop fails. - */ -static int -examine_select(fd_set * readfds, fd_set * writefds) -{ - int fd = 0; - fd_set read_x; - fd_set write_x; - struct timeval tv; - close_handler *ch = NULL; - fde *F = NULL; - struct stat sb; - debug(5, 0) ("examine_select: Examining open file descriptors...\n"); - for (fd = 0; fd < Squid_MaxFD; fd++) { - FD_ZERO(&read_x); - FD_ZERO(&write_x); - tv.tv_sec = tv.tv_usec = 0; - if (__WSAFDIsSet(fd_table[fd].win32.handle, readfds)) - FD_SET(fd, &read_x); - else if (__WSAFDIsSet(fd_table[fd].win32.handle, writefds)) - FD_SET(fd, &write_x); - else - continue; - statCounter.syscalls.selects++; - errno = 0; - if (!fstat(fd, &sb)) { - debug(5, 5) ("FD %d is valid.\n", fd); - continue; - } - F = &fd_table[fd]; - debug(5, 0) ("FD %d: %s\n", fd, xstrerror()); - debug(5, 0) ("WARNING: FD %d has handlers, but it's invalid.\n", fd); - debug(5, 0) ("FD %d is a %s called '%s'\n", - fd, - fdTypeStr[F->type], - F->desc); - debug(5, 0) ("tmout:%p read:%p write:%p\n", - F->timeout_handler, - F->read_handler, - F->write_handler); - for (ch = F->close_handler; ch; ch = ch->next) - debug(5, 0) (" close handler: %p\n", ch->handler); - if (F->close_handler) { - commCallCloseHandlers(fd); - } else if (F->timeout_handler) { - debug(5, 0) ("examine_select: Calling Timeout Handler\n"); - F->timeout_handler(fd, F->timeout_data); - } - F->close_handler = NULL; - F->timeout_handler = NULL; - F->read_handler = NULL; - F->write_handler = NULL; - FD_CLR(fd, readfds); - FD_CLR(fd, writefds); - } - return 0; -} - -static void -commIncomingStats(StoreEntry * sentry) -{ - StatCounters *f = &statCounter; - storeAppendPrintf(sentry, "Current incoming_icp_interval: %d\n", - incoming_icp_interval >> INCOMING_FACTOR); - storeAppendPrintf(sentry, "Current incoming_dns_interval: %d\n", - incoming_dns_interval >> INCOMING_FACTOR); - storeAppendPrintf(sentry, "Current incoming_http_interval: %d\n", - incoming_http_interval >> INCOMING_FACTOR); - storeAppendPrintf(sentry, "\n"); - storeAppendPrintf(sentry, "Histogram of events per incoming socket type\n"); - storeAppendPrintf(sentry, "ICP Messages handled per comm_select_icp_incoming() call:\n"); - statHistDump(&f->comm_icp_incoming, sentry, statHistIntDumper); - storeAppendPrintf(sentry, "DNS Messages handled per comm_select_dns_incoming() call:\n"); - statHistDump(&f->comm_dns_incoming, sentry, statHistIntDumper); - storeAppendPrintf(sentry, "HTTP Messages handled per comm_select_http_incoming() call:\n"); - statHistDump(&f->comm_http_incoming, sentry, statHistIntDumper); -} - void commSetEvents(int fd, int need_read, int need_write) { @@ -729,59 +90,46 @@ } static int -commDeferRead(int fd) -{ - fde *F = &fd_table[fd]; - if (F->defer_check == NULL) - return 0; - return F->defer_check(fd, F->defer_data); -} - -static void -checkTimeouts(void) +do_comm_select(int msec) { + int num; + struct timeval tv; + fd_set readfds; + fd_set writefds; + fd_set errfds; int fd; - fde *F = NULL; - PF *callback; - for (fd = 0; fd <= Biggest_FD; fd++) { - F = &fd_table[fd]; - if (!F->flags.open) - continue; - if (F->timeout == 0) - continue; - if (F->timeout > squid_curtime) - continue; - debug(5, 5) ("checkTimeouts: FD %d Expired\n", fd); - if (F->timeout_handler) { - debug(5, 5) ("checkTimeouts: FD %d: Call timeout handler\n", fd); - callback = F->timeout_handler; - F->timeout_handler = NULL; - callback(fd, F->timeout_data); - } else { - debug(5, 5) ("checkTimeouts: FD %d: Forcing comm_close()\n", fd); - comm_close(fd); - } - } -} + if (nreadfds + nwritefds == 0) { + assert(shutting_down); + return COMM_SHUTDOWN; + } + memcpy(&readfds, &global_readfds, sizeof(fd_set)); + memcpy(&writefds, &global_writefds, sizeof(fd_set)); + memcpy(&errfds, &global_writefds, sizeof(fd_set)); + tv.tv_sec = msec / 1000; + tv.tv_usec = (msec % 1000) * 1000; + statCounter.syscalls.selects++; + num = select(Biggest_FD + 1, &readfds, &writefds, &errfds, &tv); + statCounter.select_loops++; -/* Called by async-io or diskd to speed up the polling */ -void -comm_quick_poll_required(void) -{ - MAX_POLL_TIME = 10; -} + if (num < 0) { + getCurrentTime(); + if (ignoreErrno(errno)) + return COMM_OK; -/* Defer reads from this fd */ -void -commDeferFD(int fd) -{ - /* Not implemented */ -} + debug(5, 1) ("comm_select: select failure: %s\n", xstrerror()); + return COMM_ERROR; + } + statHistCount(&statCounter.select_fds_hist, num); -/* Resume reading from the given fd */ -void -commResumeFD(int fd) -{ - /* Not implemented */ + if (num == 0) + return COMM_TIMEOUT; + + for (fd = 0; fd <= Biggest_FD; fd++) { + int read_event = __WSAFDIsSet(fd_table[fd].win32.handle, &readfds); + int write_event = __WSAFDIsSet(fd_table[fd].win32.handle, &writefds) || __WSAFDIsSet(fd_table[fd].win32.handle, &errfds); + if (read_event || write_event) + comm_call_handlers(fd, read_event, write_event); + } + return COMM_OK; } diff -ruN squid-2.6.STABLE4/src/delay_pools.c squid-2.6.STABLE5/src/delay_pools.c --- squid-2.6.STABLE4/src/delay_pools.c Wed Aug 2 15:33:51 2006 +++ squid-2.6.STABLE5/src/delay_pools.c Mon Oct 23 05:22:21 2006 @@ -1,6 +1,6 @@ /* - * $Id: delay_pools.c,v 1.33 2006/08/02 21:33:51 hno Exp $ + * $Id: delay_pools.c,v 1.34 2006/10/23 11:22:21 hno Exp $ * * DEBUG: section 77 Delay Pools * AUTHOR: David Luyer @@ -145,7 +145,6 @@ return; delay_data = xcalloc(pools, sizeof(*delay_data)); memory_used += pools * sizeof(*delay_data); - eventAdd("delayPoolsUpdate", delayPoolsUpdate, NULL, 1.0, 1); delay_id_ptr_hash = hash_create(delayIdPtrHashCmp, 256, delayIdPtrHash); } @@ -164,7 +163,6 @@ { if (!delay_id_ptr_hash) return; - eventDelete(delayPoolsUpdate, NULL); safe_free(delay_data); memory_used -= pools * sizeof(*delay_data); hashFreeItems(delay_id_ptr_hash, delayIdZero); @@ -546,7 +544,6 @@ unsigned char class; if (!Config.Delay.pools) return; - eventAdd("delayPoolsUpdate", delayPoolsUpdate, NULL, 1.0, 1); if (incr < 1) return; delay_pools_last_update = squid_curtime; @@ -682,6 +679,8 @@ if (jmax >= 0 && jmax < (int) *read_sz) { if (jmax == 0) jmax = 1; + if (jmax > 1460) + jmax = 1460; *read_sz = (size_t) jmax; } return d; diff -ruN squid-2.6.STABLE4/src/enums.h squid-2.6.STABLE5/src/enums.h --- squid-2.6.STABLE4/src/enums.h Wed Jul 19 10:05:11 2006 +++ squid-2.6.STABLE5/src/enums.h Sat Sep 30 15:10:48 2006 @@ -1,6 +1,6 @@ /* - * $Id: enums.h,v 1.234 2006/07/19 16:05:11 hno Exp $ + * $Id: enums.h,v 1.235 2006/09/30 21:10:48 hno Exp $ * * * SQUID Web Proxy Cache http://www.squid-cache.org/ @@ -528,10 +528,8 @@ ENTRY_VALIDATED, ENTRY_BAD_LENGTH, ENTRY_ABORTED, - ENTRY_DEFER_READ -#if UNUSED_CODE - ENTRY_DONT_LOG -#endif + ENTRY_DEFER_READ, + KEY_EARLY_PUBLIC }; typedef enum { @@ -742,6 +740,7 @@ VARY_NONE, VARY_MATCH, VARY_OTHER, + VARY_RESTART, VARY_CANCEL }; diff -ruN squid-2.6.STABLE4/src/fd.c squid-2.6.STABLE5/src/fd.c --- squid-2.6.STABLE4/src/fd.c Sat Sep 9 06:45:06 2006 +++ squid-2.6.STABLE5/src/fd.c Mon Oct 23 05:25:29 2006 @@ -1,6 +1,6 @@ /* - * $Id: fd.c,v 1.53 2006/09/09 12:45:06 serassio Exp $ + * $Id: fd.c,v 1.55 2006/10/23 11:25:29 hno Exp $ * * DEBUG: section 51 Filedescriptor Functions * AUTHOR: Duane Wessels @@ -77,7 +77,7 @@ * re-opening it */ assert(!opening); - while (!fd_table[Biggest_FD].flags.open) + while (!fd_table[Biggest_FD].flags.open && Biggest_FD > 0) Biggest_FD--; } @@ -92,6 +92,10 @@ debug(51, 3) ("fd_close FD %d %s\n", fd, F->desc); commSetEvents(fd, 0, 0); F->flags.open = 0; +#if DELAY_POOLS + if (F->slow_id) + commRemoveSlow(fd); +#endif fdUpdateBiggest(fd, 0); Number_FD--; memset(F, '\0', sizeof(fde)); @@ -194,6 +198,13 @@ F->bytes_read += len; else F->bytes_written += len; +} + +void +fd_init(void) +{ + fd_table = xcalloc(Squid_MaxFD, sizeof(fde)); + /* XXX account fd_table */ } void diff -ruN squid-2.6.STABLE4/src/forward.c squid-2.6.STABLE5/src/forward.c --- squid-2.6.STABLE4/src/forward.c Fri Aug 25 06:26:07 2006 +++ squid-2.6.STABLE5/src/forward.c Sat Sep 30 15:10:48 2006 @@ -1,6 +1,6 @@ /* - * $Id: forward.c,v 1.116 2006/08/25 12:26:07 serassio Exp $ + * $Id: forward.c,v 1.117 2006/09/30 21:10:48 hno Exp $ * * DEBUG: section 17 Request Forwarding * AUTHOR: Duane Wessels @@ -827,7 +827,8 @@ } } debug(17, 3) ("fwdStart: '%s'\n", storeUrl(e)); - e->mem_obj->request = requestLink(r); + if (!e->mem_obj->request) + e->mem_obj->request = requestLink(r); #if URL_CHECKSUM_DEBUG assert(e->mem_obj->chksum == url_checksum(e->mem_obj->url)); #endif diff -ruN squid-2.6.STABLE4/src/fs/Makefile.in squid-2.6.STABLE5/src/fs/Makefile.in --- squid-2.6.STABLE4/src/fs/Makefile.in Fri Sep 22 03:09:50 2006 +++ squid-2.6.STABLE5/src/fs/Makefile.in Sun Oct 29 19:21:35 2006 @@ -16,7 +16,7 @@ # Makefile for storage modules in the Squid Object Cache server # -# $Id: Makefile.in,v 1.38 2006/09/22 09:09:50 hno Exp $ +# $Id: Makefile.in,v 1.40 2006/10/30 02:21:35 hno Exp $ # @@ -155,7 +155,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -239,6 +238,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/src/fs/aufs/async_io.c squid-2.6.STABLE5/src/fs/aufs/async_io.c --- squid-2.6.STABLE4/src/fs/aufs/async_io.c Sat Sep 9 10:04:38 2006 +++ squid-2.6.STABLE5/src/fs/aufs/async_io.c Sun Oct 8 01:43:31 2006 @@ -1,6 +1,6 @@ /* - * $Id: async_io.c,v 1.21 2006/09/09 16:04:38 serassio Exp $ + * $Id: async_io.c,v 1.22 2006/10/08 07:43:31 serassio Exp $ * * DEBUG: section 32 Asynchronous Disk I/O * AUTHOR: Pete Bentley @@ -77,12 +77,14 @@ static dlink_list used_list; static int initialised = 0; +static int usage_count = 0; static OBJH aioStats; static MemPool *squidaio_ctrl_pool; void aioInit(void) { + usage_count++; if (initialised) return; squidaio_ctrl_pool = memPoolCreate("aio_ctrl", sizeof(squidaio_ctrl_t)); @@ -94,6 +96,8 @@ void aioDone(void) { + if (--usage_count > 0) + return; squidaio_shutdown(); memPoolDestroy(squidaio_ctrl_pool); initialised = 0; diff -ruN squid-2.6.STABLE4/src/fs/aufs/async_io.h squid-2.6.STABLE5/src/fs/aufs/async_io.h --- squid-2.6.STABLE4/src/fs/aufs/async_io.h Sat Jul 29 11:37:18 2006 +++ squid-2.6.STABLE5/src/fs/aufs/async_io.h Mon Sep 25 13:31:34 2006 @@ -8,7 +8,6 @@ #define __ASYNC_IO_H__ extern int n_asyncufs_dirs; -extern int n_coss_dirs; extern int squidaio_nthreads; extern int squidaio_magic1; extern int squidaio_magic2; diff -ruN squid-2.6.STABLE4/src/fs/coss/coss-notes.txt squid-2.6.STABLE5/src/fs/coss/coss-notes.txt --- squid-2.6.STABLE4/src/fs/coss/coss-notes.txt Sat May 20 06:23:50 2006 +++ squid-2.6.STABLE5/src/fs/coss/coss-notes.txt Thu Oct 26 13:29:38 2006 @@ -2,7 +2,7 @@ Adrian Chadd -$Id: coss-notes.txt,v 1.3 2006/05/20 12:23:50 adrian Exp $ +$Id: coss-notes.txt,v 1.4 2006/10/26 19:29:38 serassio Exp $ COSS is a Cyclic Object storage system originally designed by @@ -129,3 +129,8 @@ sure the right options have been enabled. no compile or run-time checks are currently made to ensure the code has been compiled to support large filesystems.. at least yet. + +-- Notes: Guido Serassio, 26/October/2006 + +* When using a regular file as container, COSS storage must be initialized + once using squid -z like UFS storage. diff -ruN squid-2.6.STABLE4/src/fs/coss/store_coss.h squid-2.6.STABLE5/src/fs/coss/store_coss.h --- squid-2.6.STABLE4/src/fs/coss/store_coss.h Sat Sep 23 04:34:41 2006 +++ squid-2.6.STABLE5/src/fs/coss/store_coss.h Mon Sep 25 14:14:41 2006 @@ -22,6 +22,8 @@ #define COSS_ALLOC_ALLOCATE 1 #define COSS_ALLOC_REALLOC 2 +#define SWAPDIR_COSS "coss" + #if USE_AUFSOPS /* XXX a hack; the async ops should be broken out! */ typedef void AIOCB(int fd, void *cbdata, const char *buf, diff -ruN squid-2.6.STABLE4/src/fs/coss/store_dir_coss.c squid-2.6.STABLE5/src/fs/coss/store_dir_coss.c --- squid-2.6.STABLE4/src/fs/coss/store_dir_coss.c Sat Sep 23 04:34:41 2006 +++ squid-2.6.STABLE5/src/fs/coss/store_dir_coss.c Thu Oct 26 14:00:21 2006 @@ -1,6 +1,6 @@ /* - * $Id: store_dir_coss.c,v 1.59 2006/09/23 10:34:41 serassio Exp $ + * $Id: store_dir_coss.c,v 1.65 2006/10/26 20:00:21 serassio Exp $ * * DEBUG: section 47 Store COSS Directory Routines * AUTHOR: Eric Stern @@ -48,9 +48,8 @@ #define STORE_META_BUFSZ 4096 #define HITONLY_BUFS 2 -int n_coss_dirs = 0; int max_coss_dir_size = 0; -/* static int last_coss_pick_index = -1; */ +static int last_coss_pick_index = -1; int coss_initialised = 0; MemPool *coss_state_pool = NULL; MemPool *coss_index_pool = NULL; @@ -137,7 +136,8 @@ if (stat(sd->path, &st) == 0) { if (S_ISDIR(st.st_mode)) strcat(pathtmp, "/stripe"); - } + } else + fatalf("stripePath: Cannot stat %s.", sd->path); cs->stripe_path = xstrdup(pathtmp); } return cs->stripe_path; @@ -150,6 +150,8 @@ LOCAL_ARRAY(char, pathtmp, SQUID_MAXPATHLEN); LOCAL_ARRAY(char, digit, 32); char *pathtmp2; + struct stat st; + if (Config.Log.swap) { xstrncpy(pathtmp, sd->path, SQUID_MAXPATHLEN - 64); pathtmp2 = pathtmp; @@ -165,8 +167,14 @@ strncat(path, digit, 3); } } else { - xstrncpy(path, sd->path, SQUID_MAXPATHLEN - 64); - strcat(path, "/swap.state"); + if (stat(sd->path, &st) == 0) { + if (S_ISDIR(st.st_mode)) { + xstrncpy(path, sd->path, SQUID_MAXPATHLEN - 64); + strcat(path, "/swap.state"); + } else + fatal("storeCossDirSwapLogFile: 'cache_swap_log' is needed in your COSS configuration."); + } else + fatalf("storeCossDirSwapLogFile: Cannot stat %s.", sd->path); } if (ext) strncat(path, ext, 16); @@ -563,9 +571,55 @@ } static void -storeCossDirNewfs(SwapDir * sd) +storeCossCreateStripe(SwapDir * SD, const char *path) +{ + char *block; + int swap; + int i; + CossInfo *cs = (CossInfo *) SD->fsdata; + + debug(47, 1) ("Creating COSS stripe %s\n", path); + swap = open(path, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0600); + block = (char *) xcalloc(COSS_MEMBUF_SZ, 1); + for (i = 0; i < cs->numstripes; ++i) { + if (write(swap, block, COSS_MEMBUF_SZ) < COSS_MEMBUF_SZ) { + fatalf("Failed to create COSS stripe %s\n", path); + } + } + close(swap); + xfree(block); +} + +static void +storeCossDirNewfs(SwapDir * SD) +{ + struct stat st; + + if (stat(SD->path, &st) == 0) { + if (S_ISDIR(st.st_mode)) { + if (stat(stripePath(SD), &st) != 0) + storeCossCreateStripe(SD, stripePath(SD)); + } + } else + storeCossCreateStripe(SD, (const char *) SD->path); +} + +/* + * Only "free" the filesystem specific stuff here + */ +static void +storeCossDirFree(SwapDir * SD) { - debug(47, 3) ("Creating swap space in %s\n", stripePath(sd)); + CossInfo *cs = (CossInfo *) SD->fsdata; + if (cs->swaplog_fd > -1) { + file_close(cs->swaplog_fd); + cs->swaplog_fd = -1; + } + xfree(cs->stripes); + xfree(cs->memstripes); + xfree(cs); + SD->fsdata = NULL; /* Will aid debugging... */ + } /* we are shutting down, flush all membufs to disk */ @@ -575,10 +629,7 @@ CossInfo *cs = (CossInfo *) SD->fsdata; debug(47, 1) ("COSS: %s: syncing\n", stripePath(SD)); -#if USE_AUFSOPS - aioSync(SD); -#endif - storeCossSync(SD); /* This'll call a_file_syncqueue() */ + storeCossSync(SD); /* This'll call a_file_syncqueue() or a aioSync() */ #if !USE_AUFSOPS a_file_closequeue(&cs->aq); #endif @@ -746,7 +797,7 @@ sd->init = storeCossDirInit; sd->newfs = storeCossDirNewfs; sd->dump = storeCossDirDump; - sd->freefs = storeCossDirShutdown; + sd->freefs = storeCossDirFree; sd->dblcheck = NULL; sd->statfs = storeCossDirStats; sd->maintainfs = NULL; @@ -809,13 +860,13 @@ */ max_offset = (off_t) 0xFFFFFF << cs->blksz_bits; if ((sd->max_size + (cs->nummemstripes * (COSS_MEMBUF_SZ >> 10))) > (unsigned long) (max_offset >> 10)) { - debug(47, 0) ("COSS block-size = %d bytes\n", 1 << cs->blksz_bits); - debug(47, 0) ("COSS largest file offset = %lu KB\n", (unsigned long) max_offset >> 10); - debug(47, 0) ("COSS cache_dir size = %d KB\n", sd->max_size); + debug(47, 1) ("COSS block-size = %d bytes\n", 1 << cs->blksz_bits); + debug(47, 1) ("COSS largest file offset = %lu KB\n", (unsigned long) max_offset >> 10); + debug(47, 1) ("COSS cache_dir size = %d KB\n", sd->max_size); fatal("COSS cache_dir size exceeds largest offset\n"); } cs->max_disk_nf = ((off_t) sd->max_size << 10) >> cs->blksz_bits; - debug(47, 0) ("COSS: max disk fileno is %d\n", cs->max_disk_nf); + debug(47, 2) ("COSS: max disk fileno is %d\n", cs->max_disk_nf); /* XXX todo checks */ @@ -824,7 +875,7 @@ /* Ensure that the max size IS a multiple of the membuf size, or things * will get very fruity near the end of the disk. */ cs->numstripes = (off_t) (((off_t) sd->max_size) << 10) / COSS_MEMBUF_SZ; - debug(47, 0) ("COSS: number of stripes: %d of %d bytes each\n", cs->numstripes, COSS_MEMBUF_SZ); + debug(47, 2) ("COSS: number of stripes: %d of %d bytes each\n", cs->numstripes, COSS_MEMBUF_SZ); cs->stripes = xcalloc(cs->numstripes, sizeof(struct _cossstripe)); for (i = 0; i < cs->numstripes; i++) { cs->stripes[i].id = i; @@ -842,7 +893,7 @@ */ cs->hitonlyfullstripes = cs->maxfullstripes - HITONLY_BUFS; - debug(47, 0) ("COSS: number of memory-only stripes %d of %d bytes each\n", cs->nummemstripes, COSS_MEMBUF_SZ); + debug(47, 2) ("COSS: number of memory-only stripes %d of %d bytes each\n", cs->nummemstripes, COSS_MEMBUF_SZ); cs->memstripes = xcalloc(cs->nummemstripes, sizeof(struct _cossstripe)); for (i = 0; i < cs->nummemstripes; i++) { cs->memstripes[i].id = i; @@ -1004,8 +1055,7 @@ storeAppendPrintf(e, " block-size=%d", 1 << cs->blksz_bits); } -#if OLD_UNUSED_CODE -SwapDir * +static SwapDir * storeCossDirPick(void) { int i, choosenext = 0; @@ -1015,7 +1065,7 @@ return NULL; for (i = 0; i < Config.cacheSwap.n_configured; i++) { SD = &Config.cacheSwap.swapDirs[i]; - if (SD->type == SWAPDIR_COSS) { + if (strcmp(SD->type, SWAPDIR_COSS) == 0) { if ((last_coss_pick_index == -1) || (n_coss_dirs == 1)) { last_coss_pick_index = i; return SD; @@ -1029,7 +1079,7 @@ } for (i = 0; i < Config.cacheSwap.n_configured; i++) { SD = &Config.cacheSwap.swapDirs[i]; - if (SD->type == SWAPDIR_COSS) { + if (strcmp(SD->type, SWAPDIR_COSS) == 0) { if ((last_coss_pick_index == -1) || (n_coss_dirs == 1)) { last_coss_pick_index = i; return SD; @@ -1043,7 +1093,6 @@ } return NULL; } -#endif /* * initial setup/done code @@ -1051,6 +1100,13 @@ static void storeCossDirDone(void) { + int i, n_dirs = n_coss_dirs; + + for (i = 0; i < n_dirs; i++) + storeCossDirShutdown(storeCossDirPick()); +/* + * TODO : check if others memPoolDestroy() of COSS objects are needed here + */ memPoolDestroy(coss_state_pool); coss_initialised = 0; } @@ -1099,7 +1155,7 @@ coss_index_pool = memPoolCreate("COSS index data", sizeof(CossIndexNode)); coss_realloc_pool = memPoolCreate("COSS pending realloc", sizeof(CossPendingReloc)); coss_op_pool = memPoolCreate("COSS pending operation", sizeof(CossReadOp)); - cachemgrRegister("coss", "COSS Stats", storeCossStats, 0, 1); + cachemgrRegister(SWAPDIR_COSS, "COSS Stats", storeCossStats, 0, 1); coss_initialised = 1; } diff -ruN squid-2.6.STABLE4/src/globals.h squid-2.6.STABLE5/src/globals.h --- squid-2.6.STABLE4/src/globals.h Sun Jul 30 17:27:03 2006 +++ squid-2.6.STABLE5/src/globals.h Mon Sep 25 13:31:34 2006 @@ -1,6 +1,6 @@ /* - * $Id: globals.h,v 1.121 2006/07/30 23:27:03 hno Exp $ + * $Id: globals.h,v 1.122 2006/09/25 19:31:34 serassio Exp $ * * * SQUID Web Proxy Cache http://www.squid-cache.org/ @@ -177,5 +177,6 @@ extern int need_linux_tproxy; /* 0 */ #endif extern int opt_parse_cfg_only; /* 0 */ +extern int n_coss_dirs; /* 0 */ #endif /* SQUID_GLOBALS_H */ diff -ruN squid-2.6.STABLE4/src/http.c squid-2.6.STABLE5/src/http.c --- squid-2.6.STABLE4/src/http.c Fri Aug 25 06:26:07 2006 +++ squid-2.6.STABLE5/src/http.c Mon Oct 23 15:34:17 2006 @@ -1,6 +1,6 @@ /* - * $Id: http.c,v 1.417 2006/08/25 12:26:07 serassio Exp $ + * $Id: http.c,v 1.418 2006/10/23 21:34:17 hno Exp $ * * DEBUG: section 11 Hypertext Transfer Protocol (HTTP) * AUTHOR: Harvest Derived @@ -454,6 +454,8 @@ return; /* headers not complete */ } } + safe_free(entry->mem_obj->vary_headers); + safe_free(entry->mem_obj->vary_encoding); /* Cut away any excess body data (only needed for debug?) */ memBufAppend(&httpState->reply_hdr, "\0", 1); httpState->reply_hdr.buf[hdr_size] = '\0'; @@ -489,7 +491,6 @@ goto no_cache; } entry->mem_obj->vary_headers = xstrdup(vary); - safe_free(entry->mem_obj->vary_encoding); if (strBuf(httpState->orig_request->vary_encoding)) entry->mem_obj->vary_encoding = xstrdup(strBuf(httpState->orig_request->vary_encoding)); } diff -ruN squid-2.6.STABLE4/src/main.c squid-2.6.STABLE5/src/main.c --- squid-2.6.STABLE4/src/main.c Sat Sep 2 08:16:10 2006 +++ squid-2.6.STABLE5/src/main.c Mon Oct 23 05:22:21 2006 @@ -1,6 +1,6 @@ /* - * $Id: main.c,v 1.391 2006/09/02 14:16:10 hno Exp $ + * $Id: main.c,v 1.392 2006/10/23 11:22:21 hno Exp $ * * DEBUG: section 1 Startup and Main Loop * AUTHOR: Harvest Derived @@ -671,8 +671,6 @@ #endif debug_log = stderr; - if (FD_SETSIZE < Squid_MaxFD) - Squid_MaxFD = FD_SETSIZE; #ifdef _SQUID_WIN32_ if ((WIN32_init_err = WIN32_Subsystem_Init(&argc, &argv))) diff -ruN squid-2.6.STABLE4/src/protos.h squid-2.6.STABLE5/src/protos.h --- squid-2.6.STABLE4/src/protos.h Fri Sep 22 04:44:24 2006 +++ squid-2.6.STABLE5/src/protos.h Mon Oct 23 05:22:21 2006 @@ -1,6 +1,6 @@ /* - * $Id: protos.h,v 1.518 2006/09/22 10:44:24 hno Exp $ + * $Id: protos.h,v 1.519 2006/10/23 11:22:21 hno Exp $ * * * SQUID Web Proxy Cache http://www.squid-cache.org/ @@ -166,6 +166,7 @@ extern void commDeferFD(int fd); extern void commResumeFD(int fd); extern void commSetSelect(int, unsigned int, PF *, void *, time_t); +extern void commRemoveSlow(int fd); extern void comm_add_close_handler(int fd, PF *, void *); extern void comm_remove_close_handler(int fd, PF *, void *); extern int comm_udp_sendto(int, const struct sockaddr_in *, int, const void *, int); @@ -258,6 +259,7 @@ extern void eventFreeMemory(void); extern int eventFind(EVH *, void *); +extern void fd_init(void); extern void fd_close(int fd); extern void fd_open(int fd, unsigned int type, const char *); extern void fd_note(int fd, const char *); diff -ruN squid-2.6.STABLE4/src/repl/Makefile.in squid-2.6.STABLE5/src/repl/Makefile.in --- squid-2.6.STABLE4/src/repl/Makefile.in Fri Sep 22 03:09:50 2006 +++ squid-2.6.STABLE5/src/repl/Makefile.in Sun Oct 29 19:21:36 2006 @@ -16,7 +16,7 @@ # Makefile for storage modules in the Squid Object Cache server # -# $Id: Makefile.in,v 1.35 2006/09/22 09:09:50 hno Exp $ +# $Id: Makefile.in,v 1.37 2006/10/30 02:21:36 hno Exp $ # srcdir = @srcdir@ @@ -119,7 +119,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -203,6 +202,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@ diff -ruN squid-2.6.STABLE4/src/stat.c squid-2.6.STABLE5/src/stat.c --- squid-2.6.STABLE4/src/stat.c Mon Sep 18 16:54:39 2006 +++ squid-2.6.STABLE5/src/stat.c Wed Nov 1 13:58:52 2006 @@ -1,6 +1,6 @@ /* - * $Id: stat.c,v 1.376 2006/09/18 22:54:39 hno Exp $ + * $Id: stat.c,v 1.377 2006/11/01 20:58:52 wessels Exp $ * * DEBUG: section 18 Cache Manager Statistics * AUTHOR: Harvest Derived @@ -696,7 +696,7 @@ #endif } -#define XAVG(X) (dt ? (double) (f->X - l->X) / dt : 0.0) +#define XAVG(X) (dt ? (f->X > l->X ? ((double) (f->X - l->X) / dt) : 0.0) : 0.0) static void statAvgDump(StoreEntry * sentry, int minutes, int hours) { diff -ruN squid-2.6.STABLE4/src/store.c squid-2.6.STABLE5/src/store.c --- squid-2.6.STABLE4/src/store.c Tue Aug 15 18:31:29 2006 +++ squid-2.6.STABLE5/src/store.c Mon Oct 9 07:18:24 2006 @@ -1,6 +1,6 @@ /* - * $Id: store.c,v 1.566 2006/08/16 00:31:29 hno Exp $ + * $Id: store.c,v 1.568 2006/10/09 13:18:24 hno Exp $ * * DEBUG: section 20 Storage Manager * AUTHOR: Harvest Derived @@ -967,8 +967,14 @@ StoreEntry *e2 = NULL; const cache_key *newkey; MemObject *mem = e->mem_obj; - if (e->hash.key && !EBIT_TEST(e->flags, KEY_PRIVATE)) - return; /* is already public */ + if (e->hash.key && !EBIT_TEST(e->flags, KEY_PRIVATE)) { + if (EBIT_TEST(e->flags, KEY_EARLY_PUBLIC)) { + EBIT_CLR(e->flags, KEY_EARLY_PUBLIC); + storeSetPrivateKey(e); /* wasn't really public yet, reset the key */ + } else { + return; /* is already public */ + } + } assert(mem); /* * We can't make RELEASE_REQUEST objects public. Depending on @@ -1003,14 +1009,16 @@ storeRelease(pe); } /* Make sure the request knows the variance status */ - if (!request->vary_headers) { - const char *vary = httpMakeVaryMark(request, mem->reply); - if (vary) - request->vary_headers = xstrdup(vary); + else if (!request->vary_headers) { + if (!httpMakeVaryMark(request, mem->reply)) { + /* Release the object if we could not index the variance */ + storeReleaseRequest(e); + return; + } } } newkey = storeKeyPublicByRequest(mem->request); - if (mem->vary_headers) { + if (mem->vary_headers && !EBIT_TEST(e->flags, KEY_EARLY_PUBLIC)) { String vary = StringNull; String varyhdr; varyhdr = httpHeaderGetList(&mem->reply->header, HDR_VARY); @@ -1645,9 +1653,12 @@ if (EBIT_TEST(e->flags, ENTRY_ABORTED)) return 0; /* Entries which seem to have got stuck is not valid to send to new clients */ - if (e->store_status == STORE_PENDING) + if (e->store_status == STORE_PENDING) { if (!e->mem_obj || e->mem_obj->refresh_timestamp + 30 < squid_curtime) return 0; + else + return -1; + } return 1; } diff -ruN squid-2.6.STABLE4/src/structs.h squid-2.6.STABLE5/src/structs.h --- squid-2.6.STABLE4/src/structs.h Wed Sep 20 22:14:46 2006 +++ squid-2.6.STABLE5/src/structs.h Mon Oct 23 05:22:21 2006 @@ -1,6 +1,6 @@ /* - * $Id: structs.h,v 1.502 2006/09/21 04:14:46 swilton Exp $ + * $Id: structs.h,v 1.504 2006/10/23 11:22:21 hno Exp $ * * * SQUID Web Proxy Cache http://www.squid-cache.org/ @@ -921,6 +921,9 @@ long handle; } win32; #endif +#if DELAY_POOLS + int slow_id; +#endif }; struct _fileMap { @@ -1822,6 +1825,7 @@ #if LINUX_TPROXY unsigned int tproxy:1; #endif + unsigned int collapsed:1; /* This request was collapsed. Don't trust the store entry to be valid */ }; struct _link_list { diff -ruN squid-2.6.STABLE4/src/tools.c squid-2.6.STABLE5/src/tools.c --- squid-2.6.STABLE4/src/tools.c Fri Sep 22 04:47:42 2006 +++ squid-2.6.STABLE5/src/tools.c Wed Nov 1 13:58:52 2006 @@ -1,6 +1,6 @@ /* - * $Id: tools.c,v 1.248 2006/09/22 10:47:42 hno Exp $ + * $Id: tools.c,v 1.249 2006/11/01 20:58:52 wessels Exp $ * * DEBUG: section 21 Misc Functions * AUTHOR: Harvest Derived @@ -987,6 +987,18 @@ k->bytes += v; k->kb += (k->bytes >> 10); k->bytes &= 0x3FF; + if (k->kb < 0) { + /* + * If kb overflows and becomes negative then add powers of + * 2 until it becomes positive again. + */ + kb_t x; + x.kb = 1 << 31; + while (x.kb && ((k->kb + x.kb) < 0)) { + x.kb <<= 1; + } + k->kb += x.kb; + } } void diff -ruN squid-2.6.STABLE4/src/wccp2.c squid-2.6.STABLE5/src/wccp2.c --- squid-2.6.STABLE4/src/wccp2.c Wed Sep 20 22:14:46 2006 +++ squid-2.6.STABLE5/src/wccp2.c Wed Oct 25 18:50:04 2006 @@ -1,6 +1,6 @@ /* - * $Id: wccp2.c,v 1.26 2006/09/21 04:14:46 swilton Exp $ + * $Id: wccp2.c,v 1.28 2006/10/26 00:50:04 swilton Exp $ * * DEBUG: section 80 WCCP Support * AUTHOR: Steven WIlton @@ -622,7 +622,7 @@ wccp2_mask_identity_info.cache_identity.dest_ip_mask = 0; wccp2_mask_identity_info.cache_identity.source_port_mask = 0; wccp2_mask_identity_info.cache_identity.dest_port_mask = 0; - } else if ((service_flags & WCCP2_SERVICE_DST_IP_HASH) || (service_flags & WCCP2_SERVICE_DST_IP_ALT_HASH)) { + } else if ((service_list_ptr->info.service == WCCP2_SERVICE_STANDARD) || (service_flags & WCCP2_SERVICE_DST_IP_HASH) || (service_flags & WCCP2_SERVICE_DST_IP_ALT_HASH)) { wccp2_mask_identity_info.cache_identity.source_ip_mask = 0; wccp2_mask_identity_info.cache_identity.dest_ip_mask = htonl(0x00001741); wccp2_mask_identity_info.cache_identity.source_port_mask = 0; @@ -1447,7 +1447,7 @@ mask_element->dest_ip_mask = 0; mask_element->source_port_mask = 0; mask_element->dest_port_mask = 0; - } else if ((service_flags & WCCP2_SERVICE_DST_IP_HASH) || (service_flags & WCCP2_SERVICE_DST_IP_ALT_HASH)) { + } else if ((service_list_ptr->info.service == WCCP2_SERVICE_STANDARD) || (service_flags & WCCP2_SERVICE_DST_IP_HASH) || (service_flags & WCCP2_SERVICE_DST_IP_ALT_HASH)) { mask_element->source_ip_mask = 0; mask_element->dest_ip_mask = htonl(0x00001741); mask_element->source_port_mask = 0; @@ -1478,7 +1478,7 @@ value_element->dest_ip_value = 0; value_element->source_port_value = 0; value_element->dest_port_value = 0; - } else if ((service_flags & WCCP2_SERVICE_DST_IP_HASH) || (service_flags & WCCP2_SERVICE_DST_IP_ALT_HASH)) { + } else if ((service_list_ptr->info.service == WCCP2_SERVICE_STANDARD) || (service_flags & WCCP2_SERVICE_DST_IP_HASH) || (service_flags & WCCP2_SERVICE_DST_IP_ALT_HASH)) { value_element->source_ip_value = 0; value_element->dest_ip_value = htonl(value); value_element->source_port_value = 0; diff -ruN squid-2.6.STABLE4/src/win32.c squid-2.6.STABLE5/src/win32.c --- squid-2.6.STABLE4/src/win32.c Sat Sep 23 04:42:44 2006 +++ squid-2.6.STABLE5/src/win32.c Sun Oct 29 01:21:50 2006 @@ -1,6 +1,6 @@ /* - * $Id: win32.c,v 1.16 2006/09/23 10:42:44 serassio Exp $ + * $Id: win32.c,v 1.17 2006/10/29 08:21:50 serassio Exp $ * * Windows support * AUTHOR: Guido Serassio @@ -225,12 +225,22 @@ static unsigned int GetOSVersion() { - OSVERSIONINFO osvi; + OSVERSIONINFOEX osvi; + BOOL bOsVersionInfoEx; safe_free(WIN32_OS_string); - memset(&osvi, '\0', sizeof(OSVERSIONINFO)); - osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx((OSVERSIONINFO *) & osvi); + memset(&osvi, '\0', sizeof(OSVERSIONINFOEX)); + /* Try calling GetVersionEx using the OSVERSIONINFOEX structure. + * If that fails, try using the OSVERSIONINFO structure. + */ + + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + + if (!(bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO *) & osvi))) { + osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + if (!GetVersionEx((OSVERSIONINFO *) & osvi)) + goto GetVerError; + } switch (osvi.dwPlatformId) { case VER_PLATFORM_WIN32_NT: if (osvi.dwMajorVersion <= 4) { @@ -250,7 +260,10 @@ return _WIN_OS_WINNET; } if ((osvi.dwMajorVersion == 6) && (osvi.dwMinorVersion == 0)) { - WIN32_OS_string = xstrdup("Windows code name \"Longhorn\""); + if (osvi.wProductType == VER_NT_WORKSTATION) + WIN32_OS_string = xstrdup("Windows Vista"); + else + WIN32_OS_string = xstrdup("Windows Server \"Longhorn\""); return _WIN_OS_WINLON; } break; @@ -275,6 +288,7 @@ default: break; } + GetVerError: WIN32_OS_string = xstrdup("Unknown Windows system"); return _WIN_OS_UNKNOWN; } diff -ruN squid-2.6.STABLE4/tools/Makefile.in squid-2.6.STABLE5/tools/Makefile.in --- squid-2.6.STABLE4/tools/Makefile.in Fri Sep 22 03:09:50 2006 +++ squid-2.6.STABLE5/tools/Makefile.in Sun Oct 29 19:21:36 2006 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.9 2006/09/22 09:09:50 hno Exp $ +# $Id: Makefile.in,v 1.11 2006/10/30 02:21:36 hno Exp $ # # Uncomment and customize the following to suit your needs: # @@ -140,7 +140,6 @@ ENABLE_UNLINKD_TRUE = @ENABLE_UNLINKD_TRUE@ ENABLE_WIN32SPECIFIC_FALSE = @ENABLE_WIN32SPECIFIC_FALSE@ ENABLE_WIN32SPECIFIC_TRUE = @ENABLE_WIN32SPECIFIC_TRUE@ -EPOLL_LIBS = @EPOLL_LIBS@ ERR_DEFAULT_LANGUAGE = @ERR_DEFAULT_LANGUAGE@ ERR_LANGUAGES = @ERR_LANGUAGES@ EXEEXT = @EXEEXT@ @@ -224,6 +223,8 @@ USE_POLL_FALSE = @USE_POLL_FALSE@ USE_POLL_TRUE = @USE_POLL_TRUE@ USE_SELECT_FALSE = @USE_SELECT_FALSE@ +USE_SELECT_SIMPLE_FALSE = @USE_SELECT_SIMPLE_FALSE@ +USE_SELECT_SIMPLE_TRUE = @USE_SELECT_SIMPLE_TRUE@ USE_SELECT_TRUE = @USE_SELECT_TRUE@ USE_SELECT_WIN32_FALSE = @USE_SELECT_WIN32_FALSE@ USE_SELECT_WIN32_TRUE = @USE_SELECT_WIN32_TRUE@