See <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/313/changes>
Changes: [Amos Jeffries <[email protected]>] Full re-working of the way AcceptFD are handled in Squid Previously: a pre-defined fdc_table was initialized and left waiting just in case any of the available FD were needed as a listening port. At which point a handler was assigned and select was setup. Much action was wasted initializing the array on startup and shutdown, and various unnecessary maintenance references in comms every FD closure. Now: one merely opens a socket, defines the AsyncCall handler for the listening FD and creates a ListenStateData object from the two. When a listener socket is done with, delete the ListenStateData and the FD gets closed. Callers are responsible for maintaining a pointer to the ListenStateData. ListenStateData silently does all the comm processing for setting up and watching for new connections. Including whether accept() on a port is delayed until more FD are available. Then when any accept() is completed it sends the resulting FD and ConnectionDetails objects to the assigned callback. COMM_ERR_CLOSING and re-scheduling themselves is now not generally relevant to layers higher than comm on listening sockets. The callbacks never get called at all unless a real new connection has been accepted. The old code is still used internally by the comm layer, but details of error handling and re-scheduling of accept() never leak out into higher level code now. ListenStateData can be created in use-once or accept-many form. * use-once are intended for short temporary listening sockets such as FTP passive data links. A single inbound connection is allowed after which the handler self-destructs. * accept-many are for long term FD such as the http_port listeners which continuously accept new connections and pass them all to the same handler until something causes the ListenStateData to die (deletion, or self destruct under fatal socket IO errors). The previous existing AcceptLimiter is slightly remodeled to work with ListenStateData* instead of an intermediary callback reference type. And also altered from LIFO to FIFO behavior for better client response times under load. All the code relevant to comm layer processing of accept() is bundled into libcomm-listener.la. TODO: * wrap the SSL handshake into ListenStateData. That way SSL on some sockets can be treated as a real transport layer and for example httpsAccept and httpAccept merged into one function. * there is one bug uncovered, that when the accept() handler is deleted and the port closed while it has been deferred. The deferred queue needs to be cleared of all (multiple) deferral events, or they will be scheduled uselessly and may segfault with FD errors. This only gets hit if Squid is shutdown during active load limiting. [Amos Jeffries <[email protected]>] Merge from trunk [Amos Jeffries <[email protected]>] Merge from trunk [Amos Jeffries <[email protected]>] Typo in merge [Amos Jeffries <[email protected]>] Merge from trunk [Amos Jeffries <[email protected]>] Remove last remaining legacy functions and fdc_table dregs [Amos Jeffries <[email protected]>] Move listener socket handling to libcomm-listener.la * Renamed AcceptFD to ListenStateData * listener sockets 'owned' by the code which opened them - FtpStateData owns the FTP data sockets - config HTTP settings own the http_port/https_port listeners. * Removed fdc_table - replaced with Comm::CurrentListenerSockets. - reasonable memory savings (default 32-bit build only 8 KB, large production 64-bit build save 768 KB) - initialized in one simple fast step. - changes only made by ListenStateData constructor/destructor * HotConf ready listener sockets (depends only on further config changes to happen) [Amos Jeffries <[email protected]>] Language Updates: More manuals polished [Amos Jeffries <[email protected]>] More manuals polish ------------------------------------------ [...truncated 946 lines...] checking for an ANSI C-conforming const... (cached) yes checking for size_t... (cached) yes configure: creating ./config.status config.status: creating Makefile config.status: creating include/Makefile config.status: creating src/Makefile config.status: creating test/Makefile config.status: creating config.h config.status: executing depfiles commands === configuring in libltdl (<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/libltdl)> configure: running /bin/sh ../.././test-suite/../libltdl/configure '--prefix=/usr/local/squid' '--with-squid=<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/'> '--enable-ltdl-convenience' --cache-file=/tmp/config.cache.24486 --srcdir=../.././test-suite/../libltdl configure: loading cache /tmp/config.cache.24486 checking for a BSD-compatible install... (cached) /usr/bin/install -c checking whether build environment is sane... yes checking for gawk... (cached) gawk checking whether make sets $(MAKE)... (cached) yes checking for gcc... (cached) gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... (cached) o checking whether we are using the GNU C compiler... (cached) yes checking whether gcc accepts -g... (cached) yes checking for gcc option to accept ANSI C... none needed checking for style of include used by make... GNU checking dependency style of gcc... (cached) gcc3 checking for an ANSI C-conforming const... (cached) yes checking for inline... inline checking build system type... (cached) x86_64-unknown-linux-gnu checking host system type... (cached) x86_64-unknown-linux-gnu checking for a sed that does not truncate output... (cached) /bin/sed checking for egrep... grep -E checking for ld used by gcc... (cached) /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... (cached) yes checking for /usr/bin/ld option to reload object files... (cached) -r checking for BSD-compatible nm... (cached) /usr/bin/nm -B checking whether ln -s works... yes checking how to recognise dependent libraries... (cached) pass_all checking how to run the C preprocessor... (cached) gcc -E checking for ANSI C header files... (cached) yes checking for sys/types.h... (cached) yes checking for sys/stat.h... (cached) yes checking for stdlib.h... (cached) yes checking for string.h... (cached) yes checking for memory.h... (cached) yes checking for strings.h... (cached) yes checking for inttypes.h... (cached) yes checking for stdint.h... (cached) yes checking for unistd.h... (cached) yes checking for dlfcn.h... (cached) yes checking for g++... (cached) g++ checking whether we are using the GNU C++ compiler... (cached) yes checking whether g++ accepts -g... (cached) yes checking dependency style of g++... (cached) gcc3 checking how to run the C++ preprocessor... (cached) g++ -E checking for g77... (cached) gfortran checking whether we are using the GNU Fortran 77 compiler... (cached) yes checking whether gfortran accepts -g... (cached) yes checking the maximum length of command line arguments... (cached) 32768 checking command to parse /usr/bin/nm -B output from gcc object... (cached) ok checking for objdir... (cached) .libs checking for ar... (cached) ar checking for ranlib... (cached) ranlib checking for strip... (cached) strip checking if gcc supports -fno-rtti -fno-exceptions... (cached) no checking for gcc option to produce PIC... -fPIC checking if gcc PIC flag -fPIC works... yes checking if gcc static flag -static works... yes checking if gcc supports -c -o file.o... (cached) yes checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes checking whether -lc should be explicitly linked in... no checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... yes configure: creating libtool appending configuration tag "CXX" to libtool checking for ld used by g++... (cached) /usr/bin/ld -m elf_x86_64 checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld... (cached) yes checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes checking for g++ option to produce PIC... -fPIC checking if g++ PIC flag -fPIC works... yes checking if g++ static flag -static works... yes checking if g++ supports -c -o file.o... (cached) yes checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate appending configuration tag "F77" to libtool checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... yes checking for gfortran option to produce PIC... -fPIC checking if gfortran PIC flag -fPIC works... yes checking if gfortran static flag -static works... yes checking if gfortran supports -c -o file.o... (cached) yes checking whether the gfortran linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking for dirent.h that defines DIR... (cached) yes checking for library containing opendir... (cached) none required checking which extension is used for loadable modules... .so checking which variable specifies run-time library path... LD_LIBRARY_PATH checking for the default library search path... /lib64 /usr/lib64 /usr/lib64/mysql checking for objdir... .libs checking whether libtool supports -dlopen/-dlpreopen... yes checking for shl_load... (cached) no checking for shl_load in -ldld... (cached) no checking for dlopen in -ldl... (cached) yes checking for dlerror... (cached) yes checking for _ prefix in compiled symbols... no checking whether deplibs are loaded by dlopen... yes checking argz.h usability... yes checking argz.h presence... yes checking for argz.h... yes checking for error_t... yes checking for argz_append... yes checking for argz_create_sep... yes checking for argz_insert... yes checking for argz_next... yes checking for argz_stringify... yes checking for assert.h... (cached) yes checking for ctype.h... (cached) yes checking for errno.h... (cached) yes checking for malloc.h... (cached) yes checking for memory.h... (cached) yes checking for stdlib.h... (cached) yes checking for stdio.h... (cached) yes checking for unistd.h... (cached) yes checking dl.h usability... no checking dl.h presence... no checking for dl.h... no checking sys/dl.h usability... no checking sys/dl.h presence... no checking for sys/dl.h... no checking dld.h usability... no checking dld.h presence... no checking for dld.h... no checking mach-o/dyld.h usability... no checking mach-o/dyld.h presence... no checking for mach-o/dyld.h... no checking for string.h... (cached) yes checking for strchr... yes checking for strrchr... yes checking for memcpy... (cached) yes checking for memmove... (cached) yes checking for strcmp... yes checking for closedir... yes checking for opendir... yes checking for readdir... yes updating cache /tmp/config.cache.24486 configure: creating ./config.status config.status: creating Makefile config.status: creating config.h config.status: executing depfiles commands { test ! -d squid-3.HEAD-BZR || { find squid-3.HEAD-BZR -type d ! -perm -200 -exec chmod u+w {} ';' && rm -fr squid-3.HEAD-BZR; }; } mkdir squid-3.HEAD-BZR mkdir -p -- squid-3.HEAD-BZR/cfgaux squid-3.HEAD-BZR/include list='compat lib libltdl snmplib scripts src icons errors contrib doc helpers test-suite tools'; for subdir in $list; do \ if test "$subdir" = .; then :; else \ test -d "squid-3.HEAD-BZR/$subdir" \ || mkdir -p -- "squid-3.HEAD-BZR/$subdir" \ || exit 1; \ distdir=`CDPATH="${ZSH_VERSION+.}:" && cd squid-3.HEAD-BZR && pwd`; \ top_distdir=`CDPATH="${ZSH_VERSION+.}:" && cd squid-3.HEAD-BZR && pwd`; \ (cd $subdir && \ make \ top_distdir="$top_distdir" \ distdir="$distdir/$subdir" \ distdir) \ || exit 1; \ fi; \ done make[1]: Entering directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/compat'> mkdir -p -- <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/compat/../src> make[1]: Leaving directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/compat'> make[1]: Entering directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/lib'> mkdir -p -- <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/lib/../src> list='libTrie'; for subdir in $list; do \ if test "$subdir" = .; then :; else \ test -d "<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/lib/$subdir"> \ || mkdir -p -- "<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/lib/$subdir"> \ || exit 1; \ distdir=`CDPATH="${ZSH_VERSION+.}:" && cd <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/lib> && pwd`; \ top_distdir=`CDPATH="${ZSH_VERSION+.}:" && cd <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR> && pwd`; \ (cd $subdir && \ make \ top_distdir="$top_distdir" \ distdir="$distdir/$subdir" \ distdir) \ || exit 1; \ fi; \ done make[2]: Entering directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/lib/libTrie'> { test ! -d <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/lib/libTrie> || { find <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/lib/libTrie> -type d ! -perm -200 -exec chmod u+w {} ';' && rm -fr <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/lib/libTrie;> }; } mkdir <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/lib/libTrie> mkdir -p -- <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/lib/libTrie/cfgaux> list='include src test'; for subdir in $list; do \ if test "$subdir" = .; then :; else \ test -d "<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/lib/libTrie/$subdir"> \ || mkdir -p -- "<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/lib/libTrie/$subdir"> \ || exit 1; \ distdir=`CDPATH="${ZSH_VERSION+.}:" && cd <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/lib/libTrie> && pwd`; \ top_distdir=`CDPATH="${ZSH_VERSION+.}:" && cd <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR> && pwd`; \ (cd $subdir && \ make \ top_distdir="$top_distdir" \ distdir="$distdir/$subdir" \ distdir) \ || exit 1; \ fi; \ done make[3]: Entering directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/lib/libTrie/include'> make[3]: Leaving directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/lib/libTrie/include'> make[3]: Entering directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/lib/libTrie/src'> mkdir -p -- <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/lib/libTrie/src/../include> make[3]: Leaving directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/lib/libTrie/src'> make[3]: Entering directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/lib/libTrie/test'> make[3]: Leaving directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/lib/libTrie/test'> find <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/lib/libTrie> -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec /bin/sh <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/lib/libTrie/cfgaux/install-sh> -c -m a+r {} {} \; \ || chmod -R a+r <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/lib/libTrie> make[2]: Leaving directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/lib/libTrie'> make[1]: Leaving directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/lib'> make[1]: Entering directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/libltdl'> { test ! -d <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/libltdl> || { find <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/libltdl> -type d ! -perm -200 -exec chmod u+w {} ';' && rm -fr <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/libltdl;> }; } mkdir <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/libltdl> find <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/libltdl> -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec /bin/sh <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/libltdl/install-sh> -c -m a+r {} {} \; \ || chmod -R a+r <http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/squid-3.HEAD-BZR/libltdl> make[1]: Leaving directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/libltdl'> make[1]: Entering directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/snmplib'> make[1]: Leaving directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/snmplib'> make[1]: Entering directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/scripts'> make[1]: Leaving directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/scripts'> make[1]: Entering directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/src'> Makefile:4695: *** missing separator (did you mean TAB instead of 8 spaces?). Stop. make[1]: Leaving directory `<http://build.squid-cache.org/job/3.HEAD-amd64-CentOS-5.3/ws/btlayer-00-default/src'> make: *** [distdir] Error 1 buildtest.sh result is 2 BUILD: .././test-suite/buildtests/layer-00-default.opts make: *** [distdir] Error 1 Build FAILED.
