diff -ruN squid-2.6.STABLE10/ChangeLog squid-2.6.STABLE11/ChangeLog --- squid-2.6.STABLE10/ChangeLog Sat Mar 3 11:43:44 2007 +++ squid-2.6.STABLE11/ChangeLog Fri Mar 16 17:48:38 2007 @@ -1,3 +1,15 @@ +Changes to squid-2.6.STABLE11 (Mar 17 2007) + + - Bug #1915: assertion failed: client_side.c:4055: "buf != NULL || + !conn->body.request" + - Handle garbage helper responses better in concurrent protocol format + - Fix kqueue when overflowing the changes queue + - Make sure the child worker process commits suicide if it could + not start up + - Don't log short responses at debug level 1 + - Fix bswap16 & bwsap32 error on NetBSD + - Fix collapsed_forwarding for non-GET requests + Changes to squid-2.6.STABLE10 (Mar 4 2007) - Upgrade HTTP/0.9 responses to our HTTP version (HTTP/1.0) @@ -20,6 +32,7 @@ the path - Bug #1875, #1420. Cleanup of refresh logics when dealing with non-refreshable content + - Gopher cleanups and bugfixes - Negotiate authentication fixed again. Broken since STABLE7 by the patch for Bug #1792. - Bug #1892: COSS tries to shut down the same directory twice on exit diff -ruN squid-2.6.STABLE10/RELEASENOTES.html squid-2.6.STABLE11/RELEASENOTES.html --- squid-2.6.STABLE10/RELEASENOTES.html Sat Mar 3 14:56:36 2007 +++ squid-2.6.STABLE11/RELEASENOTES.html Fri Mar 16 17:52:07 2007 @@ -2,12 +2,12 @@ - Squid 2.6.STABLE10 release notes + Squid 2.6.STABLE11 release notes -

Squid 2.6.STABLE10 release notes

+

Squid 2.6.STABLE11 release notes

-

Squid Developers

$Id: release-2.6.html,v 1.44.2.4 2007/03/03 21:37:29 hno Exp $ +

Squid Developers

$Id: release-2.6.html,v 1.44.2.5 2007/03/12 22:52:40 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. @@ -57,6 +57,9 @@

15. Key changes squid-2.6.STABLE9 to 2.6.STABLE10

+

+

16. Key changes squid-2.6.STABLE10 to 2.6.STABLE11

+

1. Key changes from squid 2.5

@@ -67,10 +70,10 @@ and transparent proxy requests to make it easier to configure transparent and acceleration functionality. The default behaviour is to function as a standard HTTP proxy on each port that Squid is configured to listen on, but in addition -in this release the keywords "accelerated" and "transparent" can be specified +in this release the keywords "accel" and "transparent" can be specified after each port to indicate to Squid the functionality that is to be enabled on that port. This means that the old config directives relating to httpd_accel_* -are now deprecated. +are now deprecated. See below for more details about these options.
  • WCCPv2 support multiple cache engines registering with multiple WCCP routers and switches. WCCPv2 is preferred over WCCPv1 for performance and flexibility reasons if your router or switch is able to support it (all recent @@ -137,7 +140,7 @@
    http_port

    Now takes a list of options in addition to the port address, specifying the purpose of this http_port. Default is plain Internet proxy as usual.

    httpd_accel_* for transparent proxy

    Now implemented by the "transparent" http_port option

    -
    httpd_accel_* for accelerator mode

    Nov implemented by other options. See individual directives below.

    +
    httpd_accel_* for accelerator mode

    Now implemented by other options and the http_port accel option. See individual directives below.

    httpd_accel_host

    Replaced by defaultsite http_port option and cache_peer originserver option.

    httpd_accel_port

    No longer needed. Server port defined by the cache_peer port.

    httpd_accel_uses_host_header

    Replaced by vhost http_port option

    @@ -623,6 +626,23 @@ ChangeLog file for details.
  • + +

    16. Key changes squid-2.6.STABLE10 to 2.6.STABLE11

    + +

    +

    +

    + diff -ruN squid-2.6.STABLE10/configure squid-2.6.STABLE11/configure --- squid-2.6.STABLE10/configure Sat Mar 3 14:56:03 2007 +++ squid-2.6.STABLE11/configure Fri Mar 16 17:51:34 2007 @@ -1,7 +1,7 @@ #! /bin/sh -# From configure.in Revision: 1.416.2.5 . +# From configure.in Revision: 1.416.2.7 . # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59 for Squid Web Proxy 2.6.STABLE10. +# Generated by GNU Autoconf 2.59 for Squid Web Proxy 2.6.STABLE11. # # Report bugs to . # @@ -270,8 +270,8 @@ # Identity of this package. PACKAGE_NAME='Squid Web Proxy' PACKAGE_TARNAME='squid' -PACKAGE_VERSION='2.6.STABLE10' -PACKAGE_STRING='Squid Web Proxy 2.6.STABLE10' +PACKAGE_VERSION='2.6.STABLE11' +PACKAGE_STRING='Squid Web Proxy 2.6.STABLE11' PACKAGE_BUGREPORT='http://www.squid-cache.org/bugs/' ac_default_prefix=/usr/local/squid @@ -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.STABLE10 to adapt to many kinds of systems. +\`configure' configures Squid Web Proxy 2.6.STABLE11 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.STABLE10:";; + short | recursive ) echo "Configuration of Squid Web Proxy 2.6.STABLE11:";; esac cat <<\_ACEOF @@ -1158,7 +1158,7 @@ test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF -Squid Web Proxy configure 2.6.STABLE10 +Squid Web Proxy configure 2.6.STABLE11 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. @@ -1172,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.STABLE10, which was +It was created by Squid Web Proxy $as_me 2.6.STABLE11, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ @@ -1818,7 +1818,7 @@ # Define the identity of the package. PACKAGE='squid' - VERSION='2.6.STABLE10' + VERSION='2.6.STABLE11' cat >>confdefs.h <<_ACEOF @@ -15923,8 +15923,6 @@ - - for ac_func in \ bcopy \ backtrace_symbols_fd \ @@ -15979,8 +15977,6 @@ syslog \ timegm \ vsnprintf \ - bswap_16 \ - bswap_32 \ do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` @@ -18616,7 +18612,7 @@ } >&5 cat >&5 <<_CSEOF -This file was extended by Squid Web Proxy $as_me 2.6.STABLE10, which was +This file was extended by Squid Web Proxy $as_me 2.6.STABLE11, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -18679,7 +18675,7 @@ cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -Squid Web Proxy config.status 2.6.STABLE10 +Squid Web Proxy config.status 2.6.STABLE11 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" diff -ruN squid-2.6.STABLE10/configure.in squid-2.6.STABLE11/configure.in --- squid-2.6.STABLE10/configure.in Sat Mar 3 14:56:03 2007 +++ squid-2.6.STABLE11/configure.in Fri Mar 16 17:51:34 2007 @@ -1,16 +1,16 @@ dnl dnl Configuration input file for Squid dnl -dnl $Id: configure.in,v 1.416.2.5 2007/03/03 21:53:31 hno Exp $ +dnl $Id: configure.in,v 1.416.2.7 2007/03/16 23:48:38 hno Exp $ dnl dnl dnl -AC_INIT(Squid Web Proxy, 2.6.STABLE10, http://www.squid-cache.org/bugs/, squid) +AC_INIT(Squid Web Proxy, 2.6.STABLE11, 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.416.2.5 $)dnl +AC_REVISION($Revision: 1.416.2.7 $)dnl AC_PREFIX_DEFAULT(/usr/local/squid) AM_MAINTAINER_MODE @@ -2354,8 +2354,6 @@ syslog \ timegm \ vsnprintf \ - bswap_16 \ - bswap_32 \ ) SAVED_LIBS="$LIBS" diff -ruN squid-2.6.STABLE10/include/autoconf.h.in squid-2.6.STABLE11/include/autoconf.h.in --- squid-2.6.STABLE10/include/autoconf.h.in Mon Feb 5 14:36:44 2007 +++ squid-2.6.STABLE11/include/autoconf.h.in Mon Mar 12 20:36:39 2007 @@ -76,12 +76,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_BSTRING_H -/* Define to 1 if you have the `bswap_16' function. */ -#undef HAVE_BSWAP_16 - -/* Define to 1 if you have the `bswap_32' function. */ -#undef HAVE_BSWAP_32 - /* Define to 1 if you have the header file. */ #undef HAVE_BYTESWAP_H diff -ruN squid-2.6.STABLE10/include/ntlmauth.h squid-2.6.STABLE11/include/ntlmauth.h --- squid-2.6.STABLE10/include/ntlmauth.h Tue May 17 10:56:35 2005 +++ squid-2.6.STABLE11/include/ntlmauth.h Mon Mar 12 20:12:39 2007 @@ -1,5 +1,5 @@ /* - * $Id: ntlmauth.h,v 1.10 2005/05/17 16:56:35 hno Exp $ + * $Id: ntlmauth.h,v 1.10.2.1 2007/03/13 02:12:39 hno Exp $ * * * * * * * * * Legal stuff * * * * * * * * @@ -70,10 +70,14 @@ #define bswap16(x) bswap_16(x) #define bswap32(x) bswap_32(x) #else /* HAVE_BISTWAP_H */ +#ifndef bswap16 #define bswap16(x) (((((u_int16_t)x) >> 8) & 0xff) | ((((u_int16_t)x) & 0xff) << 8)) +#endif +#ifndef bswap32 #define bswap32(x) \ (((((u_int32_t)x) & 0xff000000) >> 24) | ((((u_int32_t)x) & 0x00ff0000) >> 8) | \ ((((u_int32_t)x) & 0x0000ff00) << 8) | ((((u_int32_t)x) & 0x000000ff) << 24)) +#endif #endif /* HAVE_BITSWAP_H */ /* Used internally. Microsoft seems to think this is right, I believe them. diff -ruN squid-2.6.STABLE10/include/version.h squid-2.6.STABLE11/include/version.h --- squid-2.6.STABLE10/include/version.h Sat Mar 3 14:56:03 2007 +++ squid-2.6.STABLE11/include/version.h Fri Mar 16 17:51:34 2007 @@ -9,5 +9,5 @@ */ #ifndef SQUID_RELEASE_TIME -#define SQUID_RELEASE_TIME 1172958959 +#define SQUID_RELEASE_TIME 1174089090 #endif diff -ruN squid-2.6.STABLE10/src/client_side.c squid-2.6.STABLE11/src/client_side.c --- squid-2.6.STABLE10/src/client_side.c Mon Feb 26 19:08:10 2007 +++ squid-2.6.STABLE11/src/client_side.c Wed Mar 14 08:11:26 2007 @@ -1,6 +1,6 @@ /* - * $Id: client_side.c,v 1.693.2.9 2007/02/27 02:08:10 hno Exp $ + * $Id: client_side.c,v 1.693.2.11 2007/03/14 14:11:26 hno Exp $ * * DEBUG: section 33 Client-side Routines * AUTHOR: Duane Wessels @@ -3104,7 +3104,10 @@ } else if ((done = clientCheckTransferDone(http)) != 0 || size == 0) { debug(33, 5) ("clientWriteComplete: FD %d transfer is DONE\n", fd); /* We're finished case */ - if (!done) { + if (httpReplyBodySize(http->request->method, entry->mem_obj->reply) < 0) { + debug(33, 5) ("clientWriteComplete: closing, content_length < 0\n"); + comm_close(fd); + } else if (!done) { debug(33, 5) ("clientWriteComplete: closing, !done\n"); comm_close(fd); } else if (clientGotNotEnough(http)) { @@ -3441,7 +3444,7 @@ return; } 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)) { + 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); diff -ruN squid-2.6.STABLE10/src/comm_kqueue.c squid-2.6.STABLE11/src/comm_kqueue.c --- squid-2.6.STABLE10/src/comm_kqueue.c Mon Oct 23 05:22:21 2006 +++ squid-2.6.STABLE11/src/comm_kqueue.c Mon Mar 12 16:23:04 2007 @@ -1,6 +1,6 @@ /* - * $Id: comm_kqueue.c,v 1.10 2006/10/23 11:22:21 hno Exp $ + * $Id: comm_kqueue.c,v 1.10.2.1 2007/03/12 22:23:04 hno Exp $ * * DEBUG: section 5 Socket Functions * @@ -39,16 +39,17 @@ #include #endif -#define KE_LENGTH 128 +#define KE_QUEUE_STEP 128 #define STATE_READ 1 #define STATE_WRITE 2 static int kq; static struct timespec zero_timespec; -static struct kevent *kqlst; /* kevent buffer */ +static struct kevent *kqlst; /* change buffer */ +static struct kevent *ke; /* event buffer */ static int kqmax; /* max structs to buffer */ static int kqoff; /* offset into the buffer */ -static unsigned *kqueue_state; /* keep track of the kqueue state */ +static unsigned char *kqueue_state; /* keep track of the kqueue state */ static void do_select_init() @@ -58,8 +59,9 @@ fatalf("comm_select_init: kqueue(): %s\n", xstrerror()); fd_open(kq, FD_UNKNOWN, "kqueue ctl"); commSetCloseOnExec(kq); - kqmax = getdtablesize(); + kqmax = KE_QUEUE_STEP; kqlst = xmalloc(sizeof(*kqlst) * kqmax); + ke = xmalloc(sizeof(*ke) * kqmax); kqueue_state = xcalloc(Squid_MaxFD, sizeof(*kqueue_state)); zero_timespec.tv_sec = 0; zero_timespec.tv_nsec = 0; @@ -90,37 +92,38 @@ commSetEvents(int fd, int need_read, int need_write) { struct kevent *kep; - int st_read = (kqueue_state[fd] & STATE_READ) != 0; - int st_write = (kqueue_state[fd] & STATE_WRITE) != 0; + int st_new = (need_read ? STATE_READ : 0) | + (need_write ? STATE_WRITE : 0); + int st_change; assert(fd >= 0); - debug(5, 8) ("commSetEvents(fd=%d)\n", fd); + debug(5, 8) ("commSetEvents(fd=%d, read=%d, write=%d)\n", fd, need_read, need_write); + st_change = kqueue_state[fd] ^ st_new; + if (!st_change) + return; + + if (kqoff >= kqmax - 2) { + kqmax = kqmax + KE_QUEUE_STEP; + assert(kqmax < Squid_MaxFD * 4); + kqlst = xrealloc(kqlst, sizeof(*kqlst) * kqmax); + ke = xrealloc(ke, sizeof(*ke) * kqmax); + } kep = kqlst + kqoff; - if (need_read != st_read) { + if (st_change & STATE_READ) { EV_SET(kep, (uintptr_t) fd, EVFILT_READ, need_read ? EV_ADD : EV_DELETE, 0, 0, 0); kqoff++; kep++; } - if (need_write != st_write) { + if (st_change & STATE_WRITE) { EV_SET(kep, (uintptr_t) fd, EVFILT_WRITE, need_write ? EV_ADD : EV_DELETE, 0, 0, 0); kqoff++; kep++; } - kqueue_state[fd] = (need_read ? STATE_READ : 0) | - (need_write ? STATE_WRITE : 0); - - if (kqoff >= kqmax - 2) { - if (kevent(kq, kqlst, kqoff, NULL, 0, &zero_timespec) == -1) { - debug(5, 1) ("commSetEvents(): kevent() failed on fd=%d: %s\n", - fd, xstrerror()); - return; - } - kqoff = 0; - } + kqueue_state[fd] = st_new; } static int @@ -128,14 +131,13 @@ { int i; int num; - static struct kevent ke[KE_LENGTH]; struct timespec timeout; timeout.tv_sec = msec / 1000; timeout.tv_nsec = (msec % 1000) * 1000000; statCounter.syscalls.polls++; - num = kevent(kq, kqlst, kqoff, ke, KE_LENGTH, &timeout); + num = kevent(kq, kqlst, kqoff, ke, kqmax, &timeout); kqoff = 0; if (num < 0) { getCurrentTime(); @@ -171,5 +173,10 @@ } } + if (num >= kqmax) { + kqmax = kqmax + KE_QUEUE_STEP; + kqlst = xrealloc(kqlst, sizeof(*kqlst) * kqmax); + ke = xrealloc(ke, sizeof(*ke) * kqmax); + } return COMM_OK; } diff -ruN squid-2.6.STABLE10/src/helper.c squid-2.6.STABLE11/src/helper.c --- squid-2.6.STABLE10/src/helper.c Fri Sep 8 13:41:24 2006 +++ squid-2.6.STABLE11/src/helper.c Wed Mar 14 06:08:42 2007 @@ -1,6 +1,6 @@ /* - * $Id: helper.c,v 1.62 2006/09/08 19:41:24 serassio Exp $ + * $Id: helper.c,v 1.62.2.2 2007/03/14 12:08:42 hno Exp $ * * DEBUG: section 84 Helper process maintenance * AUTHOR: Harvest Derived? @@ -752,11 +752,17 @@ t[-1] = '\0'; *t++ = '\0'; if (hlp->concurrency) { + errno = 0; i = strtol(msg, &msg, 10); + if (msg == srv->rbuf || errno) + i = -1; while (*msg && isspace((int) *msg)) msg++; } - r = srv->requests[i]; + if ((!hlp->concurrency) || (i >= 0 && i < hlp->concurrency)) + r = srv->requests[i]; + else + r = NULL; if (r) { srv->requests[i] = NULL; if (cbdataValid(r->data)) diff -ruN squid-2.6.STABLE10/src/http.c squid-2.6.STABLE11/src/http.c --- squid-2.6.STABLE10/src/http.c Mon Feb 26 15:41:46 2007 +++ squid-2.6.STABLE11/src/http.c Mon Mar 12 16:27:09 2007 @@ -1,6 +1,6 @@ /* - * $Id: http.c,v 1.419.2.5 2007/02/26 22:41:46 hno Exp $ + * $Id: http.c,v 1.419.2.6 2007/03/12 22:27:09 hno Exp $ * * DEBUG: section 11 Hypertext Transfer Protocol (HTTP) * AUTHOR: Harvest Derived @@ -721,7 +721,7 @@ } /* Is it a incomplete reply? */ if (httpState->chunk_size > 0) { - debug(11, 1) ("Short response on port %d. Expecting %" PRINTF_OFF_T " octets more\n", comm_local_port(fd), httpState->chunk_size); + debug(11, 2) ("Short response from '%s' on port %d. Expecting %" PRINTF_OFF_T " octets more\n", storeUrl(entry), comm_local_port(fd), httpState->chunk_size); comm_close(fd); return; } diff -ruN squid-2.6.STABLE10/src/main.c squid-2.6.STABLE11/src/main.c --- squid-2.6.STABLE10/src/main.c Sat Feb 3 14:55:42 2007 +++ squid-2.6.STABLE11/src/main.c Mon Mar 12 16:25:40 2007 @@ -1,6 +1,6 @@ /* - * $Id: main.c,v 1.393.2.1 2007/02/03 21:55:42 hno Exp $ + * $Id: main.c,v 1.393.2.2 2007/03/12 22:25:40 hno Exp $ * * DEBUG: section 1 Startup and Main Loop * AUTHOR: Harvest Derived @@ -1013,6 +1013,7 @@ argv[0] = xstrdup("(squid)"); execvp(prog, argv); syslog(LOG_ALERT, "execvp failed: %s", xstrerror()); + exit(1); } /* parent */ openlog(appname, LOG_PID | LOG_NDELAY | LOG_CONS, LOG_LOCAL4);