Hello community,
here is the log from the commit of package squid-beta
checked in at Wed Jul 4 23:53:53 CEST 2007.
--------
--- squid-beta/squid-beta.changes 2007-06-14 16:25:09.000000000 +0200
+++ /mounts/work_src_done/STABLE/squid-beta/squid-beta.changes 2007-07-04 16:32:19.717261000 +0200
@@ -1,0 +2,30 @@
+Wed Jul 4 16:32:17 CEST 2007 - kssingvo@suse.de
+
+- removed outdated pconn.h (bugzilla#288175)
+- injected latest patches:
+ * Squid hangs occasionally when using DNS search paths
+ * digest_edir_auth helper, using novell eDirectory universal
+ password
+ * Add missing helpers/digest_auth/eDirectory/.cvsignore
+ * ufsdump needs a bit of dependencies or parallell builds may
+ fail
+ * The last http.cc commit message is missing the following
+ important change:
+ * Try to revive a suspended service
+ * Bypass failures of optional ICAP services.
+ * Ignore comm_write notifications if the newly added
+ * Added icap_connect_timeout and icap_io_timeout squid.conf
+ options to control
+ * Made AsyncJob::callException() virtual so that kids can
+ customize exception
+ * Do not retry server transactions aborted due to request body
+ supply
+ * Added debugging and polished comments.
+ * Tell FwdState that an unregistered and failed Server is
+ * Double "squid -k shutdown" makes Squid restart again
+ * HTTP/0.9 responses support
+ * Make ACLChecklist::matchAclListSlow a private member function.
+ Not part of the public API
+- fixed compilation issues on various architectures
+
+-------------------------------------------------------------------
Old:
----
pconn.h
New:
----
10847.patch
10849.patch
10850.patch
10851.patch
10852.patch
10853.patch
10854.patch
10855.patch
10856.patch
10857.patch
10858.patch
10859.patch
10860.patch
10861.patch
10862.patch
10863.patch
10865.patch
10866.patch
squid-beta-3.0.PRE6-array_bound.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ squid-beta.spec ++++++
--- /var/tmp/diff_new_pack.hF7963/_old 2007-07-04 23:52:26.000000000 +0200
+++ /var/tmp/diff_new_pack.hF7963/_new 2007-07-04 23:52:26.000000000 +0200
@@ -13,8 +13,8 @@
BuildRequires: expat gcc-c++ krb5 libexpat-devel libxml2-devel openldap2 openldap2-devel opensp-devel pam-devel sharutils
Summary: Squid V3.0 WWW Proxy Server (new version)
Version: 3.0
-Release: 324
-License: GNU General Public License (GPL)
+Release: 326
+License: GPL v2 or later
%define ver PRE6
URL: http://www.squid-cache.org
Group: Productivity/Networking/Web/Proxy
@@ -37,7 +37,6 @@
Source6: unsquid.pl
Source7: squid.logrotate
Source9: squid.permissions
-Source10: pconn.h
Patch: squid-2.5.dif
#
# the following patches are downloaded directly from the webserver
@@ -95,7 +94,25 @@
Patch47: http://www.squid-cache.org/Versions/v3/3.0/changesets/10844.patch
Patch48: http://www.squid-cache.org/Versions/v3/3.0/changesets/10845.patch
Patch49: http://www.squid-cache.org/Versions/v3/3.0/changesets/10846.patch
-Patch50: http://www.squid-cache.org/Versions/v3/3.0/changesets/10848.patch
+Patch50: http://www.squid-cache.org/Versions/v3/3.0/changesets/10847.patch
+Patch51: http://www.squid-cache.org/Versions/v3/3.0/changesets/10848.patch
+Patch52: http://www.squid-cache.org/Versions/v3/3.0/changesets/10849.patch
+Patch53: http://www.squid-cache.org/Versions/v3/3.0/changesets/10850.patch
+Patch54: http://www.squid-cache.org/Versions/v3/3.0/changesets/10851.patch
+Patch55: http://www.squid-cache.org/Versions/v3/3.0/changesets/10852.patch
+Patch56: http://www.squid-cache.org/Versions/v3/3.0/changesets/10853.patch
+Patch57: http://www.squid-cache.org/Versions/v3/3.0/changesets/10854.patch
+Patch58: http://www.squid-cache.org/Versions/v3/3.0/changesets/10855.patch
+Patch59: http://www.squid-cache.org/Versions/v3/3.0/changesets/10856.patch
+Patch60: http://www.squid-cache.org/Versions/v3/3.0/changesets/10857.patch
+Patch61: http://www.squid-cache.org/Versions/v3/3.0/changesets/10858.patch
+Patch62: http://www.squid-cache.org/Versions/v3/3.0/changesets/10859.patch
+Patch63: http://www.squid-cache.org/Versions/v3/3.0/changesets/10860.patch
+Patch64: http://www.squid-cache.org/Versions/v3/3.0/changesets/10861.patch
+Patch65: http://www.squid-cache.org/Versions/v3/3.0/changesets/10862.patch
+Patch66: http://www.squid-cache.org/Versions/v3/3.0/changesets/10863.patch
+Patch67: http://www.squid-cache.org/Versions/v3/3.0/changesets/10865.patch
+Patch68: http://www.squid-cache.org/Versions/v3/3.0/changesets/10866.patch
#
# Patch100: squid-3.0-gcc.patch
Patch101: squid-beta-3.0-libmxl2.patch
@@ -105,6 +122,7 @@
Patch105: squid-beta-3.0-openldap.patch
Patch106: squid-beta-3.0-mem_node_64bit.patch
Patch107: squid-beta-3.0-md5.patch
+Patch108: squid-beta-3.0.PRE6-array_bound.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%define squidlibdir %{_libdir}/squid
%define squidconfdir /etc/squid
@@ -120,7 +138,6 @@
%prep
%setup -n squid-%{version}.%{ver}
-cp -ai %{SOURCE10} src
%patch -p0
%patch1 -p1
%patch2 -p1
@@ -172,32 +189,60 @@
%patch48 -p1
%patch49 -p1
%patch50 -p1
-# %patch51 -p1
-# %patch52 -p1
-# %patch53 -p1
-# %patch54 -p1
-# %patch55 -p1
-# %patch56 -p1
-# %patch57 -p1
-# %patch58 -p1
-# %patch59 -p1
-# %patch60 -p1
-# %patch61 -p1
-# %patch62 -p1
-# %patch63 -p1
-# %patch64 -p1
-# %patch65 -p1
-# %patch66 -p1
-# %patch67 -p1
-# %patch68 -p1
+%patch51 -p1
+%patch52 -p1
+%patch53 -p1
+%patch54 -p1
+%patch55 -p1
+%patch56 -p1
+%patch57 -p1
+%patch58 -p1
+%patch59 -p1
+%patch60 -p1
+%patch61 -p1
+%patch62 -p1
+%patch63 -p1
+%patch64 -p1
+%patch65 -p1
+%patch66 -p1
+%patch67 -p1
+%patch68 -p1
# %patch69 -p1
+# %patch70 -p1
+# %patch71 -p1
+# %patch72 -p1
+# %patch73 -p1
+# %patch74 -p1
+# %patch75 -p1
+# %patch76 -p1
+# %patch77 -p1
+# %patch78 -p1
+# %patch79 -p1
+# %patch80 -p1
+# %patch81 -p1
+# %patch82 -p1
+# %patch83 -p1
+# %patch84 -p1
+# %patch85 -p1
+# %patch86 -p1
+# %patch87 -p1
+# %patch88 -p1
+# %patch89 -p1
+# %patch90 -p1
+# %patch91 -p1
+# %patch92 -p1
+# %patch93 -p1
+# %patch94 -p1
+# %patch95 -p1
+# %patch96 -p1
# %patch100 -p1
%patch101 -p1
perl -p -i -e 's|SAMBAPREFIX=/usr/local/samba|SAMBAPREFIX=/usr|' helpers/basic_auth/SMB/Makefile.in
perl -p -i -e 's|SAMBAPREFIX=/usr/local/samba|SAMBAPREFIX=/usr|' helpers/ntlm_auth/SMB/Makefile.in
perl -p -i -e 's|/usr/local/bin/perl|/usr/bin/perl|' `find -name "*.pl"`
if [ "%_lib" = "lib64" ]; then
-%patch102 -p1
+# %patch102 -p1
+ :
fi
%ifarch ia64
%patch103 -p1
@@ -206,6 +251,7 @@
%patch105 -p1
%patch106 -p1
%patch107 -p0
+%patch108 -p1
%build
export CFLAGS="$RPM_OPT_FLAGS -fPIE -fPIC -fno-strict-aliasing"
@@ -424,6 +470,33 @@
#%doc squid_ldapauth.conf
%changelog
+* Wed Jul 04 2007 - kssingvo@suse.de
+- removed outdated pconn.h (bugzilla#288175)
+- injected latest patches:
+ * Squid hangs occasionally when using DNS search paths
+ * digest_edir_auth helper, using novell eDirectory universal
+ password
+ * Add missing helpers/digest_auth/eDirectory/.cvsignore
+ * ufsdump needs a bit of dependencies or parallell builds may
+ fail
+ * The last http.cc commit message is missing the following
+ important change:
+ * Try to revive a suspended service
+ * Bypass failures of optional ICAP services.
+ * Ignore comm_write notifications if the newly added
+ * Added icap_connect_timeout and icap_io_timeout squid.conf
+ options to control
+ * Made AsyncJob::callException() virtual so that kids can
+ customize exception
+ * Do not retry server transactions aborted due to request body
+ supply
+ * Added debugging and polished comments.
+ * Tell FwdState that an unregistered and failed Server is
+ * Double "squid -k shutdown" makes Squid restart again
+ * HTTP/0.9 responses support
+ * Make ACLChecklist::matchAclListSlow a private member function.
+ Not part of the public API
+- fixed compilation issues on various architectures
* Thu Jun 14 2007 - kssingvo@suse.de
- update to version 3.0PRE6:
* Preparing to release Squid-3.0.PRE6
++++++ 10847.patch ++++++
---------------------
PatchSet 10847
Date: 2007/06/10 12:08:55
Author: hno
Branch: HEAD
Tag: (none)
Log:
Bootstrapped
Members:
Makefile.in:1.97->1.98
configure:1.538->1.539
contrib/Makefile.in:1.65->1.66
doc/Makefile.in:1.71->1.72
errors/Makefile.in:1.87->1.88
helpers/Makefile.in:1.58->1.59
helpers/basic_auth/Makefile.in:1.77->1.78
helpers/basic_auth/DB/Makefile.in:1.1->1.2
helpers/basic_auth/LDAP/Makefile.in:1.77->1.78
helpers/basic_auth/MSNT/Makefile.in:1.80->1.81
helpers/basic_auth/NCSA/Makefile.in:1.77->1.78
helpers/basic_auth/PAM/Makefile.in:1.78->1.79
helpers/basic_auth/POP3/Makefile.in:1.5->1.6
helpers/basic_auth/SASL/Makefile.in:1.74->1.75
helpers/basic_auth/SMB/Makefile.in:1.76->1.77
helpers/basic_auth/YP/Makefile.in:1.77->1.78
helpers/basic_auth/getpwnam/Makefile.in:1.75->1.76
helpers/basic_auth/mswin_sspi/Makefile.in:1.19->1.20
helpers/basic_auth/multi-domain-NTLM/Makefile.in:1.73->1.74
helpers/digest_auth/Makefile.in:1.73->1.74
helpers/digest_auth/ldap/Makefile.in:1.19->1.20
helpers/digest_auth/password/Makefile.in:1.78->1.79
helpers/external_acl/Makefile.in:1.64->1.65
helpers/external_acl/ip_user/Makefile.in:1.63->1.64
helpers/external_acl/ldap_group/Makefile.in:1.65->1.66
helpers/external_acl/mswin_lm_group/Makefile.in:1.19->1.20
helpers/external_acl/session/Makefile.in:1.16->1.17
helpers/external_acl/unix_group/Makefile.in:1.63->1.64
helpers/external_acl/wbinfo_group/Makefile.in:1.61->1.62
helpers/negotiate_auth/Makefile.in:1.18->1.19
helpers/negotiate_auth/mswin_sspi/Makefile.in:1.18->1.19
helpers/ntlm_auth/Makefile.in:1.75->1.76
helpers/ntlm_auth/SMB/Makefile.in:1.75->1.76
helpers/ntlm_auth/SMB/smbval/Makefile.in:1.64->1.65
helpers/ntlm_auth/fakeauth/Makefile.in:1.72->1.73
helpers/ntlm_auth/mswin_sspi/Makefile.in:1.18->1.19
helpers/ntlm_auth/no_check/Makefile.in:1.74->1.75
icons/Makefile.in:1.88->1.89
include/autoconf.h.in:1.168->1.169
lib/Makefile.in:1.131->1.132
scripts/Makefile.in:1.68->1.69
snmplib/Makefile.in:1.77->1.78
src/Makefile.in:1.423->1.424
src/auth/Makefile.in:1.76->1.77
src/fs/Makefile.in:1.81->1.82
src/repl/Makefile.in:1.75->1.76
test-suite/Makefile.in:1.72->1.73
tools/Makefile.in:1.11->1.12
Index: squid3/Makefile.in
===================================================================
RCS file: /cvsroot/squid/squid3/Makefile.in,v
retrieving revision 1.97
retrieving revision 1.98
diff -u -r1.97 -r1.98
--- squid3/Makefile.in 17 Apr 2007 00:44:16 -0000 1.97
+++ squid3/Makefile.in 10 Jun 2007 12:08:55 -0000 1.98
@@ -15,7 +15,7 @@
@SET_MAKE@
#
-# $Id: Makefile.in,v 1.97 2007/04/17 00:44:16 hno Exp $
+# $Id: Makefile.in,v 1.98 2007/06/10 12:08:55 hno Exp $
#
srcdir = @srcdir@
top_srcdir = @top_srcdir@
@@ -218,14 +218,28 @@
USE_AIO_WIN32_TRUE = @USE_AIO_WIN32_TRUE@
USE_DELAY_POOLS_FALSE = @USE_DELAY_POOLS_FALSE@
USE_DELAY_POOLS_TRUE = @USE_DELAY_POOLS_TRUE@
+USE_DEVPOLL_FALSE = @USE_DEVPOLL_FALSE@
+USE_DEVPOLL_TRUE = @USE_DEVPOLL_TRUE@
USE_DNSSERVER_FALSE = @USE_DNSSERVER_FALSE@
USE_DNSSERVER_TRUE = @USE_DNSSERVER_TRUE@
+USE_EPOLL_FALSE = @USE_EPOLL_FALSE@
+USE_EPOLL_TRUE = @USE_EPOLL_TRUE@
USE_ESI_FALSE = @USE_ESI_FALSE@
USE_ESI_TRUE = @USE_ESI_TRUE@
USE_ICAP_CLIENT_FALSE = @USE_ICAP_CLIENT_FALSE@
USE_ICAP_CLIENT_TRUE = @USE_ICAP_CLIENT_TRUE@
USE_IPC_WIN32_FALSE = @USE_IPC_WIN32_FALSE@
USE_IPC_WIN32_TRUE = @USE_IPC_WIN32_TRUE@
+USE_KQUEUE_FALSE = @USE_KQUEUE_FALSE@
+USE_KQUEUE_TRUE = @USE_KQUEUE_TRUE@
+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@
USE_SNMP_FALSE = @USE_SNMP_FALSE@
USE_SNMP_TRUE = @USE_SNMP_TRUE@
VERSION = @VERSION@
++++++ 10849.patch ++++++
---------------------
PatchSet 10849
Date: 2007/06/17 21:39:49
Author: hno
Branch: HEAD
Tag: (none)
Log:
Make ACLChecklist::matchAclListSlow a private member function. Not part of the public API
Members:
src/ACLChecklist.cc:1.38->1.39
src/ACLChecklist.cci:1.4->1.5
src/ACLChecklist.h:1.24->1.25
Index: squid3/src/ACLChecklist.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ACLChecklist.cc,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -r1.38 -r1.39
--- squid3/src/ACLChecklist.cc 9 May 2007 09:07:38 -0000 1.38
+++ squid3/src/ACLChecklist.cc 17 Jun 2007 21:39:49 -0000 1.39
@@ -1,5 +1,5 @@
/*
- * $Id: ACLChecklist.cc,v 1.38 2007/05/09 09:07:38 wessels Exp $
+ * $Id: ACLChecklist.cc,v 1.39 2007/06/17 21:39:49 hno Exp $
*
* DEBUG: section 28 Access Control
* AUTHOR: Duane Wessels
@@ -276,6 +276,12 @@
}
void
+ACLChecklist::matchAclListSlow(const acl_list * list)
+{
+ matchAclList(list, false);
+}
+
+void
ACLChecklist::matchAclList(const acl_list * head, bool const fast)
{
PROF_start(aclMatchAclList);
Index: squid3/src/ACLChecklist.cci
===================================================================
RCS file: /cvsroot/squid/squid3/src/ACLChecklist.cci,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- squid3/src/ACLChecklist.cci 25 Apr 2007 11:30:18 -0000 1.4
+++ squid3/src/ACLChecklist.cci 17 Jun 2007 21:39:49 -0000 1.5
@@ -1,5 +1,5 @@
/*
- * $Id: ACLChecklist.cci,v 1.4 2007/04/25 11:30:18 adrian Exp $
+ * $Id: ACLChecklist.cci,v 1.5 2007/06/17 21:39:49 hno Exp $
*
* DEBUG: section 28 Access Control
* AUTHOR: Henrik Nordstrom
@@ -39,8 +39,3 @@
return finished();
}
-void
-ACLChecklist::matchAclListSlow(const acl_list * list)
-{
- matchAclList(list, false);
-}
Index: squid3/src/ACLChecklist.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/ACLChecklist.h,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- squid3/src/ACLChecklist.h 9 May 2007 07:36:24 -0000 1.24
+++ squid3/src/ACLChecklist.h 17 Jun 2007 21:39:49 -0000 1.25
@@ -1,6 +1,6 @@
/*
- * $Id: ACLChecklist.h,v 1.24 2007/05/09 07:36:24 wessels Exp $
+ * $Id: ACLChecklist.h,v 1.25 2007/06/17 21:39:49 hno Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -97,7 +97,6 @@
void checkCallback(allow_t answer);
void preCheck();
_SQUID_INLINE_ bool matchAclListFast(const acl_list * list);
- _SQUID_INLINE_ void matchAclListSlow(const acl_list * list);
ConnStateData::Pointer conn();
void conn(ConnStateData::Pointer);
int authenticated();
@@ -143,6 +142,7 @@
private:
void matchAclList(const acl_list * list, bool const fast);
+ void matchAclListSlow(const acl_list * list);
CBDATA_CLASS(ACLChecklist);
ConnStateData::Pointer conn_; /* hack for ident and NTLM */
bool async_;
++++++ 10850.patch ++++++
---------------------
PatchSet 10850
Date: 2007/06/17 21:48:20
Author: hno
Branch: HEAD
Tag: (none)
Log:
Author: Christos Tsantilas
HTTP/0.9 responses support
This patch adds back HTTP/0.9 support, upgrading them to HTTP/1.0.
Members:
src/http.cc:1.523->1.524
Index: squid3/src/http.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/http.cc,v
retrieving revision 1.523
retrieving revision 1.524
diff -u -r1.523 -r1.524
--- squid3/src/http.cc 29 May 2007 13:31:40 -0000 1.523
+++ squid3/src/http.cc 17 Jun 2007 21:48:20 -0000 1.524
@@ -1,6 +1,6 @@
/*
- * $Id: http.cc,v 1.523 2007/05/29 13:31:40 amosjeffries Exp $
+ * $Id: http.cc,v 1.524 2007/06/17 21:48:20 hno Exp $
*
* DEBUG: section 11 Hypertext Transfer Protocol (HTTP)
* AUTHOR: Harvest Derived
@@ -717,30 +717,42 @@
const bool parsed = newrep->parse(readBuf, eof, &error);
- if (!parsed && error > 0) { // unrecoverable parsing error
- debugs(11, 3, "processReplyHeader: Non-HTTP-compliant header: '" << readBuf->content() << "'");
- flags.headers_parsed = 1;
- // negated result yields http_status
- failReply (newrep, error);
- ctx_exit(ctx);
- return;
- }
-
- if (!parsed) { // need more data
- assert(!error);
- assert(!eof);
- delete newrep;
- ctx_exit(ctx);
- return;
+ if(!parsed && readBuf->contentSize() > 5 && strncmp(readBuf->content(), "HTTP/", 5) != 0){
+ MemBuf *mb;
+ HttpReply *tmprep = new HttpReply;
+ tmprep->sline.version = HttpVersion(1, 0);
+ tmprep->sline.status = HTTP_OK;
+ tmprep->header.putTime(HDR_DATE, squid_curtime);
+ tmprep->header.putExt("X-Transformed-From", "HTTP/0.9");
+ mb = tmprep->pack();
+ newrep->parse(mb, eof, &error);
+ delete tmprep;
+ }
+ else{
+ if (!parsed && error > 0) { // unrecoverable parsing error
+ debugs(11, 3, "processReplyHeader: Non-HTTP-compliant header: '" << readBuf->content() << "'");
+ flags.headers_parsed = 1;
+ // negated result yields http_status
+ failReply (newrep, error);
+ ctx_exit(ctx);
+ return;
+ }
+
+ if (!parsed) { // need more data
+ assert(!error);
+ assert(!eof);
+ delete newrep;
+ ctx_exit(ctx);
+ return;
+ }
+
+ debugs(11, 9, "GOT HTTP REPLY HDR:\n---------\n" << readBuf->content() << "\n----------");
+
+ header_bytes_read = headersEnd(readBuf->content(), readBuf->contentSize());
+ readBuf->consume(header_bytes_read);
}
reply = HTTPMSGLOCK(newrep);
-
- debugs(11, 9, "GOT HTTP REPLY HDR:\n---------\n" << readBuf->content() << "\n----------");
-
- header_bytes_read = headersEnd(readBuf->content(), readBuf->contentSize());
- readBuf->consume(header_bytes_read);
-
flags.headers_parsed = 1;
keepaliveAccounting(reply);
++++++ 10851.patch ++++++
---------------------
PatchSet 10851
Date: 2007/06/17 22:08:48
Author: hno
Branch: HEAD
Tag: (none)
Log:
Bug #1900: Double "squid -k shutdown" makes Squid restart again
Members:
src/main.cc:1.447->1.448
Index: squid3/src/main.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/main.cc,v
retrieving revision 1.447
retrieving revision 1.448
diff -u -r1.447 -r1.448
--- squid3/src/main.cc 30 Apr 2007 16:56:09 -0000 1.447
+++ squid3/src/main.cc 17 Jun 2007 22:08:48 -0000 1.448
@@ -1,6 +1,6 @@
/*
- * $Id: main.cc,v 1.447 2007/04/30 16:56:09 wessels Exp $
+ * $Id: main.cc,v 1.448 2007/06/17 22:08:48 hno Exp $
*
* DEBUG: section 1 Startup and Main Loop
* AUTHOR: Harvest Derived
@@ -1576,6 +1576,12 @@
exit(0);
break;
+ case SIGINT:
+ case SIGTERM:
+ syslog(LOG_ALERT, "Exiting due to unexpected forced shutdown");
+ exit(1);
+ break;
+
default:
break;
}
++++++ 10852.patch ++++++
---------------------
PatchSet 10852
Date: 2007/06/19 20:27:00
Author: rousskov
Branch: HEAD
Tag: (none)
Log:
Bug #1981 fix: Tell FwdState that an unregistered and failed Server is
gone.
When a Server unregisters its fd (by calling FwdState::unregister) and
then fails, call FwdState::handleUnregisteredServerEnd to tell FwdState
that the server is done working, so that the transaction does not get
stuck waiting for the server to call FwdState::complete. The old code
would just set Server's FwdState pointer to NULL which was only enough
if FwdState::self was already NULL due to aborts.
This change fixed the bug in my limited ICAP tests.
The whole FwdState relationship with Servers needs a serious revision as
similar bugs probably do (or will) exist. We probably need to maintain a
state variable representing the relationship. The following Server
states are possible, at least: got valid FD and working, closed FD but
still working, stopped working (failure or success). FwdState needs to
be notified when we stopped working. Currently, when Server closes the
FD, deep down the Server stack, it may not be clear whether the Server
is still working or not.
Finally, it may be a good idea for FwdState to notify Server when
FwdState is aborted. Currently, the Server must check that the store
entry is still valid to notice the abort, and it sometimes forgets to do
that, causing store assertions.
Members:
src/forward.cc:1.165->1.166
src/forward.h:1.11->1.12
src/ftp.cc:1.424->1.425
src/http.cc:1.524->1.525
Index: squid3/src/forward.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/forward.cc,v
retrieving revision 1.165
retrieving revision 1.166
diff -u -r1.165 -r1.166
--- squid3/src/forward.cc 26 May 2007 06:38:04 -0000 1.165
+++ squid3/src/forward.cc 19 Jun 2007 20:27:00 -0000 1.166
@@ -1,6 +1,6 @@
/*
- * $Id: forward.cc,v 1.165 2007/05/26 06:38:04 wessels Exp $
+ * $Id: forward.cc,v 1.166 2007/06/19 20:27:00 rousskov Exp $
*
* DEBUG: section 17 Request Forwarding
* AUTHOR: Duane Wessels
@@ -497,6 +497,14 @@
assert(server_fd == fd);
server_fd = -1;
+ retryOrBail();
+}
+
+void
+FwdState::retryOrBail() {
+ if (!self) // we have aborted before the server called us back
+ return; // we are destroyed when the server clears its Pointer to us
+
if (checkRetry()) {
int originserver = (servers->_peer == NULL);
debugs(17, 3, "fwdServerClosed: re-forwarding (" << n_tries << " tries, " << (squid_curtime - start_t) << " secs)");
@@ -535,6 +543,16 @@
self = NULL; // refcounted
}
+// called by the server that failed after calling unregister()
+void
+FwdState::handleUnregisteredServerEnd()
+{
+ debugs(17, 2, "handleUnregisteredServerEnd: self=" << self <<
+ " err=" << err << ' ' << entry->url());
+ assert(server_fd < 0);
+ retryOrBail();
+}
+
#if USE_SSL
void
FwdState::negotiateSSL(int fd)
Index: squid3/src/forward.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/forward.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- squid3/src/forward.h 15 Apr 2007 14:46:16 -0000 1.11
+++ squid3/src/forward.h 19 Jun 2007 20:27:00 -0000 1.12
@@ -32,6 +32,7 @@
void fail(ErrorState *err);
void unregister(int fd);
void complete();
+ void handleUnregisteredServerEnd();
int reforward();
bool reforwardableStatus(http_status s);
void serverClosed(int fd);
@@ -62,6 +63,7 @@
static void logReplyStatus(int tries, http_status status);
void completed();
+ void retryOrBail();
#if WIP_FWD_LOG
Index: squid3/src/ftp.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ftp.cc,v
retrieving revision 1.424
retrieving revision 1.425
diff -u -r1.424 -r1.425
--- squid3/src/ftp.cc 29 May 2007 13:31:39 -0000 1.424
+++ squid3/src/ftp.cc 19 Jun 2007 20:27:00 -0000 1.425
@@ -1,6 +1,6 @@
/*
- * $Id: ftp.cc,v 1.424 2007/05/29 13:31:39 amosjeffries Exp $
+ * $Id: ftp.cc,v 1.425 2007/06/19 20:27:00 rousskov Exp $
*
* DEBUG: section 9 File Transfer Protocol (FTP)
* AUTHOR: Harvest Derived
@@ -3378,10 +3378,13 @@
{
debugs(9,5,HERE << "aborting transaction for " << reason <<
"; FD " << ctrl.fd << ", Data FD " << data.fd << ", this " << this);
- if (ctrl.fd >= 0)
+ if (ctrl.fd >= 0) {
comm_close(ctrl.fd);
- else
- delete this;
+ return;
+ }
+
+ fwd->handleUnregisteredServerEnd();
+ delete this;
}
#if ICAP_CLIENT
Index: squid3/src/http.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/http.cc,v
retrieving revision 1.524
retrieving revision 1.525
diff -u -r1.524 -r1.525
--- squid3/src/http.cc 17 Jun 2007 21:48:20 -0000 1.524
+++ squid3/src/http.cc 19 Jun 2007 20:27:00 -0000 1.525
@@ -1,6 +1,6 @@
/*
- * $Id: http.cc,v 1.524 2007/06/17 21:48:20 hno Exp $
+ * $Id: http.cc,v 1.525 2007/06/19 20:27:00 rousskov Exp $
*
* DEBUG: section 11 Hypertext Transfer Protocol (HTTP)
* AUTHOR: Harvest Derived
@@ -1935,10 +1935,13 @@
debugs(11,5, HERE << "aborting transaction for " << reason <<
"; FD " << fd << ", this " << this);
- if (fd >= 0)
+ if (fd >= 0) {
comm_close(fd);
- else
- delete this;
+ return;
+ }
+
+ fwd->handleUnregisteredServerEnd();
+ delete this;
}
void
++++++ 10853.patch ++++++
---------------------
PatchSet 10853
Date: 2007/06/19 20:49:37
Author: rousskov
Branch: HEAD
Tag: (none)
Log:
Added debugging and polished comments.
Members:
src/forward.cc:1.166->1.167
Index: squid3/src/forward.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/forward.cc,v
retrieving revision 1.166
retrieving revision 1.167
diff -u -r1.166 -r1.167
--- squid3/src/forward.cc 19 Jun 2007 20:27:00 -0000 1.166
+++ squid3/src/forward.cc 19 Jun 2007 20:49:37 -0000 1.167
@@ -1,6 +1,6 @@
/*
- * $Id: forward.cc,v 1.166 2007/06/19 20:27:00 rousskov Exp $
+ * $Id: forward.cc,v 1.167 2007/06/19 20:49:37 rousskov Exp $
*
* DEBUG: section 17 Request Forwarding
* AUTHOR: Duane Wessels
@@ -502,8 +502,11 @@
void
FwdState::retryOrBail() {
- if (!self) // we have aborted before the server called us back
- return; // we are destroyed when the server clears its Pointer to us
+ if (!self) { // we have aborted before the server called us back
+ debugs(17, 5, HERE << "not retrying because of earlier abort");
+ // we will be destroyed when the server clears its Pointer to us
+ return;
+ }
if (checkRetry()) {
int originserver = (servers->_peer == NULL);
++++++ 10854.patch ++++++
---------------------
PatchSet 10854
Date: 2007/06/19 20:58:26
Author: rousskov
Branch: HEAD
Tag: (none)
Log:
Do not retry server transactions aborted due to request body supply
failures because the problem is not with the server and will not go away
if FwdState tries again.
Merged from the squid3-icap branch.
Members:
src/Server.cc:1.11->1.12
Index: squid3/src/Server.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/Server.cc,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- squid3/src/Server.cc 8 May 2007 16:45:00 -0000 1.11
+++ squid3/src/Server.cc 19 Jun 2007 20:58:26 -0000 1.12
@@ -1,5 +1,5 @@
/*
- * $Id: Server.cc,v 1.11 2007/05/08 16:45:00 rousskov Exp $
+ * $Id: Server.cc,v 1.12 2007/06/19 20:58:26 rousskov Exp $
*
* DEBUG:
* AUTHOR: Duane Wessels
@@ -213,6 +213,7 @@
if (requestSender != NULL)
debugs(9,3, HERE << "fyi: request body aborted while we were sending");
+ fwd->dontRetry(true); // the problem is not with the server
stopConsumingFrom(requestBodySource); // requestSender, if any, will notice
// kids extend this
++++++ 10855.patch ++++++
---------------------
PatchSet 10855
Date: 2007/06/19 21:00:11
Author: rousskov
Branch: HEAD
Tag: (none)
Log:
Made AsyncJob::callException() virtual so that kids can customize exception
handling. ICAP transactions will use that to bypass failures.
Merged from the squid3-icap branch.
Members:
src/ICAP/AsyncJob.h:1.1->1.2
Index: squid3/src/ICAP/AsyncJob.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/AsyncJob.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- squid3/src/ICAP/AsyncJob.h 8 May 2007 16:32:11 -0000 1.1
+++ squid3/src/ICAP/AsyncJob.h 19 Jun 2007 21:00:11 -0000 1.2
@@ -1,6 +1,6 @@
/*
- * $Id: AsyncJob.h,v 1.1 2007/05/08 16:32:11 rousskov Exp $
+ * $Id: AsyncJob.h,v 1.2 2007/06/19 21:00:11 rousskov Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -80,7 +80,7 @@
// asynchronous call maintenance
bool callStart(const char *methodName);
- void callException(const TextException &e);
+ virtual void callException(const TextException &e);
virtual void callEnd();
const char *stopReason; // reason for forcing done() to be true
++++++ 10856.patch ++++++
---------------------
PatchSet 10856
Date: 2007/06/19 21:03:45
Author: rousskov
Branch: HEAD
Tag: (none)
Log:
Added icap_connect_timeout and icap_io_timeout squid.conf options to control
how long an ICAP transaction should wait for the ICAP server to accept its
connection or process the next I/O. These options are needed for many optional
ICAP services that are poorly reachable or otherwise delay network I/Os.
Waiting for a service is harmful to user experience, especially when the
service failure or lack of connectivity can be bypassed.
The two knobs use HTTP option values as defaults and have different defaults
for essential and optional services. This may be a bad idea and will change
depending on user feedback.
All timeouts are currently global. Eventually, we will need per-service or
service group timeouts and, possibly, even an OPTIONS-specific timeout.
Merged from the squid3-icap branch.
Members:
src/cf.data.pre:1.438->1.439
src/ICAP/ICAPConfig.cc:1.16->1.17
src/ICAP/ICAPConfig.h:1.13->1.14
Index: squid3/src/cf.data.pre
===================================================================
RCS file: /cvsroot/squid/squid3/src/cf.data.pre,v
retrieving revision 1.438
retrieving revision 1.439
diff -u -r1.438 -r1.439
--- squid3/src/cf.data.pre 26 May 2007 06:38:03 -0000 1.438
+++ squid3/src/cf.data.pre 19 Jun 2007 21:03:45 -0000 1.439
@@ -1,6 +1,6 @@
#
-# $Id: cf.data.pre,v 1.438 2007/05/26 06:38:03 wessels Exp $
+# $Id: cf.data.pre,v 1.439 2007/06/19 21:03:45 rousskov Exp $
#
#
# SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -4997,6 +4997,36 @@
If you want to enable the ICAP module support, set this to on.
DOC_END
+NAME: icap_connect_timeout
+TYPE: time_t
+DEFAULT: none
+LOC: TheICAPConfig.connect_timeout_raw
+IFDEF: ICAP_CLIENT
+DOC_START
+ This parameter specifies how long to wait for the TCP connect to
+ the requested ICAP server to complete before giving up and either
+ terminating the HTTP transaction or bypassing the failure.
+
+ The default for optional services is peer_connect_timeout.
+ The default for essential services is connect_timeout.
+ If this option is explicitly set, its value applies to all services.
+DOC_END
+
+NAME: icap_io_timeout
+COMMENT: time-units
+TYPE: time_t
+DEFAULT: none
+LOC: TheICAPConfig.io_timeout_raw
+IFDEF: ICAP_CLIENT
+DOC_START
+ This parameter specifies how long to wait for an I/O activity on
+ an established, active ICAP connection before giving up and
+ either terminating the HTTP transaction or bypassing the
+ failure.
+
+ The default is read_timeout.
+DOC_END
+
NAME: icap_service_failure_limit
TYPE: int
IFDEF: ICAP_CLIENT
Index: squid3/src/ICAP/ICAPConfig.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/ICAPConfig.cc,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- squid3/src/ICAP/ICAPConfig.cc 29 May 2007 13:31:43 -0000 1.16
+++ squid3/src/ICAP/ICAPConfig.cc 19 Jun 2007 21:03:46 -0000 1.17
@@ -1,6 +1,6 @@
/*
- * $Id: ICAPConfig.cc,v 1.16 2007/05/29 13:31:43 amosjeffries Exp $
+ * $Id: ICAPConfig.cc,v 1.17 2007/06/19 21:03:46 rousskov Exp $
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
* ----------------------------------------------------------
@@ -431,3 +431,20 @@
classes.clean();
};
+
+time_t ICAPConfig::connect_timeout(bool bypassable) const
+{
+ if (connect_timeout_raw > 0)
+ return connect_timeout_raw; // explicitly configured
+
+ return bypassable ? Config.Timeout.peer_connect : Config.Timeout.connect;
+}
+
+time_t ICAPConfig::io_timeout(bool) const
+{
+ if (io_timeout_raw > 0)
+ return io_timeout_raw; // explicitly configured
+ // TODO: provide a different default for an ICAP transaction that
+ // can still be bypassed
+ return Config.Timeout.read;
+}
Index: squid3/src/ICAP/ICAPConfig.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/ICAPConfig.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- squid3/src/ICAP/ICAPConfig.h 29 May 2007 13:31:44 -0000 1.13
+++ squid3/src/ICAP/ICAPConfig.h 19 Jun 2007 21:03:46 -0000 1.14
@@ -1,6 +1,6 @@
/*
- * $Id: ICAPConfig.h,v 1.13 2007/05/29 13:31:44 amosjeffries Exp $
+ * $Id: ICAPConfig.h,v 1.14 2007/06/19 21:03:46 rousskov Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -96,6 +96,8 @@
int onoff;
int preview_enable;
int preview_size;
+ time_t connect_timeout_raw;
+ time_t io_timeout_raw;
int default_options_ttl;
int send_client_ip;
int send_client_username;
@@ -112,6 +114,9 @@
~ICAPConfig();
+ time_t connect_timeout(bool bypassable) const;
+ time_t io_timeout(bool bypassable) const;
+
void parseICAPService(void);
void freeICAPService(void);
void dumpICAPService(StoreEntry *, const char *);
++++++ 10857.patch ++++++
---------------------
PatchSet 10857
Date: 2007/06/19 21:08:33
Author: rousskov
Branch: HEAD
Tag: (none)
Log:
Ignore comm_write notifications if the newly added
ICAPXaction::ignoreLastWrite member is set. This allows kids to more safely
work around comm inability to cancel a pending write request.
When connect() times out, throw an exception instead of calling mustStop()
because we can bypass the former and not the latter. We cannot bypass mustStop
because the code may use it for legitimate stopping conditions. Eventually,
we may want to have two kinds of exceptions: bypassable and fatal.
Support icap_connect_timeout and icap_io_timeout squid.conf options.
Count I/O timeout as a service failure. This helps suspend broken services
faster and avoid HTTP processing delays when the service is optional.
Eventually, we will probably count all (or most) exceptions as service
failures.
Removed ICAPXaction members that were copied to AsyncJob some time ago.
Polished debugging.
Merged from the squid3-icap branch.
Members:
src/ICAP/ICAPXaction.cc:1.19->1.20
src/ICAP/ICAPXaction.h:1.11->1.12
Index: squid3/src/ICAP/ICAPXaction.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/ICAPXaction.cc,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- squid3/src/ICAP/ICAPXaction.cc 29 May 2007 13:31:44 -0000 1.19
+++ squid3/src/ICAP/ICAPXaction.cc 19 Jun 2007 21:08:33 -0000 1.20
@@ -68,6 +68,7 @@
commEof(false),
reuseConnection(true),
isRetriable(true),
+ ignoreLastWrite(false),
connector(NULL), reader(NULL), writer(NULL), closer(NULL)
{
debugs(93,3, typeName << " constructed, this=" << this <<
@@ -81,7 +82,7 @@
}
void ICAPXaction::disableRetries() {
- debugs(93,5, typeName << (isRetriable ? "becomes" : "remains") <<
+ debugs(93,5, typeName << (isRetriable ? " becomes" : " remains") <<
" final" << status());
isRetriable = false;
}
@@ -130,7 +131,8 @@
debugs(93,3, typeName << " opens connection to " << s.host.buf() << ":" << s.port);
- commSetTimeout(connection, Config.Timeout.connect,
+ // TODO: service bypass status may differ from that of a transaction
+ commSetTimeout(connection, TheICAPConfig.connect_timeout(service().bypass),
&ICAPXaction_noteCommTimedout, this);
closer = &ICAPXaction_noteCommClosed;
@@ -225,12 +227,16 @@
Must(writer);
writer = NULL;
-
- Must(commStatus == COMM_OK);
-
- updateTimeout();
-
- handleCommWrote(size);
+
+ if (ignoreLastWrite) {
+ // a hack due to comm inability to cancel a pending write
+ ignoreLastWrite = false;
+ debugs(93, 7, HERE << "ignoring last write; status: " << commStatus);
+ } else {
+ Must(commStatus == COMM_OK);
+ updateTimeout();
+ handleCommWrote(size);
+ }
ICAPXaction_Exit();
}
@@ -247,16 +253,14 @@
void ICAPXaction::handleCommTimedout()
{
- debugs(93, 0, HERE << "ICAP FD " << connection << " timeout to " << theService->methodStr() << " " << theService->uri.buf());
+ debugs(93, 2, HERE << typeName << " timeout with " <<
+ theService->methodStr() << " " << theService->uri.buf() << status());
reuseConnection = false;
- MemBuf mb;
- mb.init();
-
- if (fillVirginHttpHeader(mb)) {
- debugs(93, 0, HERE << "\tfor " << mb.content());
- }
+ service().noteFailure();
- mustStop("connection with ICAP service timed out");
+ throw TexcHere(connector ?
+ "timed out while connecting to the ICAP service" :
+ "timed out while talking to the ICAP service");
}
// unexpected connection close while talking to the ICAP service
@@ -293,7 +297,8 @@
if (reader || writer) {
// restart the timeout before each I/O
// XXX: why does Config.Timeout lacks a write timeout?
- commSetTimeout(connection, Config.Timeout.read,
+ // TODO: service bypass status may differ from that of a transaction
+ commSetTimeout(connection, TheICAPConfig.io_timeout(service().bypass),
&ICAPXaction_noteCommTimedout, this);
} else {
// clear timeout when there is no I/O
Index: squid3/src/ICAP/ICAPXaction.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/ICAPXaction.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- squid3/src/ICAP/ICAPXaction.h 8 May 2007 16:32:12 -0000 1.11
+++ squid3/src/ICAP/ICAPXaction.h 19 Jun 2007 21:08:33 -0000 1.12
@@ -1,6 +1,6 @@
/*
- * $Id: ICAPXaction.h,v 1.11 2007/05/08 16:32:12 rousskov Exp $
+ * $Id: ICAPXaction.h,v 1.12 2007/06/19 21:08:33 rousskov Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -132,6 +132,7 @@
bool commEof;
bool reuseConnection;
bool isRetriable;
+ bool ignoreLastWrite;
const char *stopReason;
@@ -141,13 +142,9 @@
IOCB *writer;
PF *closer;
- const char *typeName; // the type of the final class (child), for debugging
-
private:
static int TheLastId;
- const char *inCall; // name of the asynchronous call being executed, if any
-
static void reusedConnection(void *data);
//CBDATA_CLASS2(ICAPXaction);
++++++ 10858.patch ++++++
---------------------
PatchSet 10858
Date: 2007/06/19 21:12:15
Author: rousskov
Branch: HEAD
Tag: (none)
Log:
Bug #1974 fix: Bypass failures of optional ICAP services.
To bypass various failures, ICAPModXact catches its own exceptions and enables
the "echo" mode instead of quitting. Exceptions are not overruled if the
transaction is retriable. The code disables bypass for essential ICAP services
and when something makes clean echoing impossible (e.g., some buffered HTTP
body content was consumed).
This design allows the same bypass mechanism to be used for moth REQMOD and
RESPMOD, regardless of the vectoring point. Its implementation did not require
changing any Squid core files.
Previously many if not most ICAP failures were not bypassed and users were
receiving cryptic "ICAP protocol error" messages when an optional ICAP
service went down. With the current code, the service may go up and down many
times but only the transactions with large message bodies (that were executing
when the service went down) should be affected.
When deciding on whether to consume HTTP content written to the ICAP server,
Squid has to resolve a trade-off: postponing consumption longer increases
process footprint and may slow the HTTP side down, but consuming sooner
increases the chance of that "ICAP protocol" error being returned to the user.
Since Squid cannot buffer very large messages, some errors are inevitable. We
may want to add knobs to control this tradeoff.
The entries below are only indirectly related to the bug #1974 fix.
virginConsume() does not call or imply checkConsuming(). We must call
checkConsuming() even if we called virginConsume(). Otherwise, we may leave
and get destroyed while the pipe object still holds a [consumer] pointer to
us.
Polished VirginBodyAct so that we can distinguish disabled from undecided
states without using magical negative size constants.
Do not stop writing before throwing an exception. If the exception kills the
transaction, the transaction should cleanup the writer anyway. To bypass an
exception, we need all virgin content intact. Stopping writes before throwing
an exception may consume virgin content because the code does not know that
the exception is about to be thrown and may perceive content as "no longer
needed".
Added debugging.
Merged from the squid3-icap branch.
Members:
src/ICAP/ICAPModXact.cc:1.33->1.34
src/ICAP/ICAPModXact.h:1.8->1.9
Index: squid3/src/ICAP/ICAPModXact.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/ICAPModXact.cc,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- squid3/src/ICAP/ICAPModXact.cc 29 May 2007 13:31:44 -0000 1.33
+++ squid3/src/ICAP/ICAPModXact.cc 19 Jun 2007 21:12:15 -0000 1.34
@@ -42,7 +42,8 @@
ICAPXaction("ICAPModXact", anInitiator, aService),
icapReply(NULL),
virginConsumed(0),
- bodyParser(NULL)
+ bodyParser(NULL),
+ canStartBypass(false) // too early
{
assert(virginHeader);
@@ -70,6 +71,8 @@
estimateVirginBody(); // before virgin disappears!
+ canStartBypass = service().bypass;
+
// it is an ICAP violation to send request to a service w/o known OPTIONS
if (service().up())
@@ -109,7 +112,7 @@
startWriting();
} else {
disableRetries();
- mustStop("ICAP service unusable");
+ throw TexcHere("ICAP service is unusable");
}
ICAPXaction_Exit();
@@ -348,6 +351,8 @@
void ICAPModXact::virginConsume()
{
+ debugs(93, 9, "consumption guards: " << !virgin.body_pipe << isRetriable);
+
if (!virgin.body_pipe)
return; // nothing to consume
@@ -355,10 +360,28 @@
return; // do not consume if we may have to retry later
BodyPipe &bp = *virgin.body_pipe;
+
+ // Why > 2? HttpState does not use the last bytes in the buffer
+ // because delayAwareRead() is arguably broken. See
+ // HttpStateData::maybeReadVirginBody for more details.
+ if (canStartBypass && bp.buf().spaceSize() > 2) {
+ // Postponing may increase memory footprint and slow the HTTP side
+ // down. Not postponing may increase the number of ICAP errors
+ // if the ICAP service fails. We may also use "potential" space to
+ // postpone more aggressively. Should the trade-off be configurable?
+ debugs(93, 8, HERE << "postponing consumption from " << bp.status());
+ return;
+ }
+
const size_t have = static_cast(bp.buf().contentSize());
const size_t end = virginConsumed + have;
size_t offset = end;
+ debugs(93, 9, HERE << "max virgin consumption offset=" << offset <<
+ " acts " << virginBodyWriting.active() << virginBodySending.active() <<
+ " consumed=" << virginConsumed <<
+ " from " << virgin.body_pipe->status());
+
if (virginBodyWriting.active())
offset = XMIN(virginBodyWriting.offset(), offset);
@@ -373,6 +396,7 @@
bp.consume(size);
virginConsumed += size;
Must(!isRetriable); // or we should not be consuming
+ disableBypass("consumed content");
}
}
@@ -404,15 +428,16 @@
// call at any time, usually in the middle of the destruction sequence!
// Somebody should add comm_remove_write_handler() to comm API.
reuseConnection = false;
+ ignoreLastWrite = true;
}
debugs(93, 7, HERE << "will no longer write" << status());
- state.writing = State::writingReallyDone;
-
if (virginBodyWriting.active()) {
virginBodyWriting.disable();
virginConsume();
}
+ state.writing = State::writingReallyDone;
+ checkConsuming();
}
void ICAPModXact::stopBackup()
@@ -489,6 +514,7 @@
" bytes");
virginBodySending.progress(size);
virginConsume();
+ disableBypass("echoed content");
}
if (virginBodyEndReached(virginBodySending)) {
@@ -507,6 +533,7 @@
return state.sending == State::sendingDone;
}
+// stop (or do not start) sending adapted message body
void ICAPModXact::stopSending(bool nicely)
{
if (doneSending())
@@ -554,6 +581,56 @@
parseBody();
}
+void ICAPModXact::callException(const TextException &e)
+{
+ if (!canStartBypass || isRetriable) {
+ ICAPXaction::callException(e);
+ return;
+ }
+
+ try {
+ debugs(93, 2, "bypassing ICAPModXact::" << inCall << " exception: " <<
+ e.message << ' ' << status());
+ bypassFailure();
+ }
+ catch (const TextException &bypassE) {
+ ICAPXaction::callException(bypassE);
+ }
+}
+
+void ICAPModXact::bypassFailure()
+{
+ disableBypass("already started to bypass");
+
+ Must(!isRetriable); // or we should not be bypassing
+
+ prepEchoing();
+
+ startSending();
+
+ // end all activities associated with the ICAP server
+
+ stopParsing();
+
+ stopWriting(true); // or should we force it?
+ if (connection >= 0) {
+ reuseConnection = false; // be conservative
+ cancelRead(); // may not work; and we cannot stop connecting either
+ if (!doneWithIo())
+ debugs(93, 7, "Warning: bypass failed to stop I/O" << status());
+ }
+}
+
+void ICAPModXact::disableBypass(const char *reason)
+{
+ if (canStartBypass) {
+ debugs(93,7, HERE << "will never start bypass because " << reason);
+ canStartBypass = false;
+ }
+}
+
+
+
// note that allocation for echoing is done in handle204NoContent()
void ICAPModXact::maybeAllocateHttpMsg()
{
@@ -587,6 +664,13 @@
return;
}
+ startSending();
+}
+
+// called after parsing all headers or when bypassing an exception
+void ICAPModXact::startSending()
+{
+ disableBypass("sent headers");
sendAnswer(adapted.header);
if (state.sending == State::sendingVirgin)
@@ -687,6 +771,15 @@
void ICAPModXact::handle204NoContent()
{
stopParsing();
+ prepEchoing();
+}
+
+// Called when we receive a 204 No Content response and
+// when we are trying to bypass a service failure.
+// We actually start sending (echoig or not) in startSending.
+void ICAPModXact::prepEchoing()
+{
+ disableBypass("preparing to echo content");
// We want to clone the HTTP message, but we do not want
// to copy some non-HTTP state parts that HttpMsg kids carry in them.
@@ -732,9 +825,11 @@
if (oldHead->body_pipe != NULL) {
debugs(93, 7, HERE << "will echo virgin body from " <<
oldHead->body_pipe);
+ if (!virginBodySending.active())
+ virginBodySending.plan(); // will throw if not possible
state.sending = State::sendingVirgin;
checkConsuming();
- Must(virginBodySending.active());
+
// TODO: optimize: is it possible to just use the oldHead pipe and
// remove ICAP from the loop? This echoing is probably a common case!
makeAdaptedBodyPipe("echoed virgin response");
@@ -850,6 +945,10 @@
debugs(93, 5, HERE << "have " << readBuf.contentSize() << " body bytes after " <<
"parse; parsed all: " << parsed);
+ // TODO: expose BodyPipe::putSize() to make this check simpler and clearer
+ if (adapted.body_pipe->buf().contentSize() > 0) // parsed something sometime
+ disableBypass("sent adapted content");
+
if (parsed) {
stopParsing();
stopSending(true); // the parser succeeds only if all parsed data fits
@@ -1208,6 +1307,9 @@
if (!doneSending() && state.sending != State::sendingUndecided)
buf.Printf("S(%d)", state.sending);
+
+ if (canStartBypass)
+ buf.append("Y", 1);
}
void ICAPModXact::fillDoneStatus(MemBuf &buf) const
@@ -1325,31 +1427,32 @@
-VirginBodyAct::VirginBodyAct(): theStart(-1)
+VirginBodyAct::VirginBodyAct(): theStart(0), theState(stUndecided)
{}
void VirginBodyAct::plan()
{
- if (theStart < 0)
- theStart = 0;
+ Must(!disabled());
+ Must(!theStart); // not started
+ theState = stActive;
}
void VirginBodyAct::disable()
{
- theStart = -2;
+ theState = stDisabled;
}
void VirginBodyAct::progress(size_t size)
{
Must(active());
Must(size >= 0);
- theStart += static_cast(size);
+ theStart += size;
}
size_t VirginBodyAct::offset() const
{
Must(active());
- return static_cast(theStart);
+ return theStart;
}
Index: squid3/src/ICAP/ICAPModXact.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/ICAPModXact.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- squid3/src/ICAP/ICAPModXact.h 8 May 2007 16:32:11 -0000 1.8
+++ squid3/src/ICAP/ICAPModXact.h 19 Jun 2007 21:12:15 -0000 1.9
@@ -1,6 +1,6 @@
/*
- * $Id: ICAPModXact.h,v 1.8 2007/05/08 16:32:11 rousskov Exp $
+ * $Id: ICAPModXact.h,v 1.9 2007/06/19 21:12:15 rousskov Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -81,11 +81,13 @@
{
public:
- VirginBodyAct(); // disabled by default
+ VirginBodyAct();
void plan(); // the activity may happen; do not consume at or above offset
void disable(); // the activity wont continue; no consumption restrictions
- bool active() const { return theStart >= 0; } // planned and not disabled
+
+ bool active() const { return theState == stActive; }
+ bool disabled() const { return theState == stDisabled; }
// methods below require active()
@@ -93,7 +95,10 @@
void progress(size_t size); // note processed body bytes
private:
- ssize_t theStart; // offset, unless negative.
+ size_t theStart; // unprocessed virgin body data offset
+
+ typedef enum { stUndecided, stActive, stDisabled } State;
+ State theState;
};
@@ -153,6 +158,10 @@
ICAPInOut virgin;
ICAPInOut adapted;
+protected:
+ // bypasses exceptions if needed and possible
+ virtual void callException(const TextException &e);
+
private:
virtual void start();
@@ -213,6 +222,12 @@
void handle204NoContent();
void handleUnknownScode();
+ void bypassFailure();
+
+ void startSending();
+ void disableBypass(const char *reason);
+
+ void prepEchoing();
void echoMore();
virtual bool doneAll() const;
@@ -245,6 +260,8 @@
ChunkedCodingParser *bodyParser; // ICAP response body parser
+ bool canStartBypass; // enables bypass of transaction failures
+
class State
{
++++++ 10859.patch ++++++
---------------------
PatchSet 10859
Date: 2007/06/19 21:13:49
Author: rousskov
Branch: HEAD
Tag: (none)
Log:
Partial bug #1973 fix: Try to revive a suspended service after the
icap_service_revival_delay.
When a service gets suspended, schedule an OPTIONS update after the
icap_service_revival_delay. If there is already an OPTIONS fetch scheduled,
that outdated event will be deleted using eventDelete().
Eventually, we may want to have a separate option to control suspended
service revival.
Polished code, comments, and debugging.
Merged from the squid3-icap branch.
Members:
src/ICAP/ICAPServiceRep.cc:1.15->1.16
src/ICAP/ICAPServiceRep.h:1.9->1.10
Index: squid3/src/ICAP/ICAPServiceRep.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/ICAPServiceRep.cc,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- squid3/src/ICAP/ICAPServiceRep.cc 30 May 2007 20:22:30 -0000 1.15
+++ squid3/src/ICAP/ICAPServiceRep.cc 19 Jun 2007 21:13:49 -0000 1.16
@@ -175,8 +175,11 @@
void ICAPServiceRep::noteFailure() {
++theSessionFailures;
- debugs(93,4, "ICAPService failure " << theSessionFailures <<
- ", out of " << TheICAPConfig.service_failure_limit << " allowed");
+ debugs(93,4, theSessionFailures << " ICAPService failures, out of " <<
+ TheICAPConfig.service_failure_limit << " allowed " << status());
+
+ if (isSuspended)
+ return;
if (TheICAPConfig.service_failure_limit >= 0 &&
theSessionFailures > TheICAPConfig.service_failure_limit)
@@ -194,6 +197,7 @@
} else {
isSuspended = reason;
debugs(93,1, "suspending ICAPService for " << reason);
+ scheduleUpdate(squid_curtime + TheICAPConfig.service_revival_delay);
announceStatusChange("suspended", true);
}
}
@@ -453,7 +457,7 @@
debugs(93,3, "ICAPService got new options and is now " << status());
- scheduleUpdate();
+ scheduleUpdate(optionsFetchTime());
scheduleNotification();
}
@@ -468,53 +472,67 @@
// Such a timeout should probably be a generic AsyncStart feature.
}
-void ICAPServiceRep::scheduleUpdate()
+void ICAPServiceRep::scheduleUpdate(time_t when)
{
- if (updateScheduled)
- return; // already scheduled
-
- // XXX: move hard-coded constants from here to TheICAPConfig
-
- // conservative estimate of how long the OPTIONS transaction will take
- const int expectedWait = 20; // seconds
-
- time_t when = 0;
-
- if (theOptions && theOptions->valid()) {
- const time_t expire = theOptions->expire();
- debugs(93,7, "ICAPService options expire on " << expire << " >= " << squid_curtime);
-
- // Unknown or invalid (too small) expiration times should not happen.
- // ICAPOptions should use the default TTL, and ICAP servers should not
- // send invalid TTLs, but bugs and attacks happen.
- if (expire < expectedWait)
- when = squid_curtime + 60*60;
+ if (updateScheduled) {
+ debugs(93,7, "ICAPService reschedules update");
+ // XXX: check whether the event is there because AR saw
+ // an unreproducible eventDelete assertion on 2007/06/18
+ if (eventFind(&ICAPServiceRep_noteTimeToUpdate, this))
+ eventDelete(&ICAPServiceRep_noteTimeToUpdate, this);
else
- when = expire - expectedWait; // before the current options expire
- } else {
- // delay for a down service
- when = squid_curtime + TheICAPConfig.service_revival_delay;
+ debugs(93,1, "XXX: ICAPService lost an update event.");
+ updateScheduled = false;
}
- debugs(93,7, "ICAPService options raw update at " << when << " or in " <<
+ debugs(93,7, HERE << "raw OPTIONS fetch at " << when << " or in " <<
(when - squid_curtime) << " sec");
+ debugs(93,9, HERE << "last fetched at " << theLastUpdate << " or " <<
+ (squid_curtime - theLastUpdate) << " sec ago");
/* adjust update time to prevent too-frequent updates */
if (when < squid_curtime)
when = squid_curtime;
- const int minUpdateGap = expectedWait + 10; // seconds
+ // XXX: move hard-coded constants from here to TheICAPConfig
+ const int minUpdateGap = 30; // seconds
if (when < theLastUpdate + minUpdateGap)
when = theLastUpdate + minUpdateGap;
const int delay = when - squid_curtime;
- debugs(93,5, "ICAPService will update options in " << delay << " sec");
+ debugs(93,5, "ICAPService will fetch OPTIONS in " << delay << " sec");
+
eventAdd("ICAPServiceRep::noteTimeToUpdate",
&ICAPServiceRep_noteTimeToUpdate, this, delay, 0, true);
updateScheduled = true;
}
+// returns absolute time when OPTIONS should be fetched
+time_t
+ICAPServiceRep::optionsFetchTime() const
+{
+ if (theOptions && theOptions->valid()) {
+ const time_t expire = theOptions->expire();
+ debugs(93,7, "ICAPService options expire on " << expire << " >= " << squid_curtime);
+
+ // conservative estimate of how long the OPTIONS transaction will take
+ // XXX: move hard-coded constants from here to TheICAPConfig
+ const int expectedWait = 20; // seconds
+
+ // Unknown or invalid (too small) expiration times should not happen.
+ // ICAPOptions should use the default TTL, and ICAP servers should not
+ // send invalid TTLs, but bugs and attacks happen.
+ if (expire < expectedWait)
+ return squid_curtime;
+ else
+ return expire - expectedWait; // before the current options expire
+ }
+
+ // use revival delay as "expiration" time for a service w/o valid options
+ return squid_curtime + TheICAPConfig.service_revival_delay;
+}
+
// returns a temporary string depicting service status, for debugging
const char *ICAPServiceRep::status() const
{
Index: squid3/src/ICAP/ICAPServiceRep.h
===================================================================
RCS file: /cvsroot/squid/squid3/src/ICAP/ICAPServiceRep.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- squid3/src/ICAP/ICAPServiceRep.h 29 May 2007 13:31:44 -0000 1.9
+++ squid3/src/ICAP/ICAPServiceRep.h 19 Jun 2007 21:13:49 -0000 1.10
@@ -1,6 +1,6 @@
/*
- * $Id: ICAPServiceRep.h,v 1.9 2007/05/29 13:31:44 amosjeffries Exp $
+ * $Id: ICAPServiceRep.h,v 1.10 2007/06/19 21:13:49 rousskov Exp $
*
*
* SQUID Web Proxy Cache http://www.squid-cache.org/
@@ -47,10 +47,13 @@
host many ICAP services. */
/*
- * A service is "up" if there is a fresh cached OPTIONS response and is
- * "down" otherwise. A service is "probed" if we tried to get an OPTIONS
- * response from it and succeeded or failed. A probed down service is
- * called "broken".
+ * A service with a fresh cached OPTIONS response and without many failures
+ * is an "up" service. All other services are "down". A service is "probed"
+ * if we tried to get an OPTIONS response from it and succeeded or failed.
+ * A probed down service is called "broken".
+ *
+ * The number of failures required to bring an up service down is determined
+ * by icap_service_failure_limit in squid.conf.
*
* As a bootstrapping mechanism, ICAP transactions wait for an unprobed
* service to get a fresh OPTIONS response (see the callWhenReady method).
@@ -151,8 +154,9 @@
bool hasOptions() const;
bool needNewOptions() const;
+ time_t optionsFetchTime() const;
- void scheduleUpdate();
+ void scheduleUpdate(time_t when);
void scheduleNotification();
void startGettingOptions();
++++++ 10860.patch ++++++
---------------------
PatchSet 10860
Date: 2007/06/19 21:19:04
Author: rousskov
Branch: HEAD
Tag: (none)
Log:
The last http.cc commit message is missing the following important change:
HttpStateData may get stuck if request body producer aborts while the
request body is being sent. The code already had a related XXX comment.
This change is meant to abort the server transaction when that happens,
but I cannot reproduce the problem and, hence, is not sure the change is
correct and sufficient.
When handling request body producer abort, create an error before
terminating the server transaction because FwdState asserts there is an
error. Unfortunately, we do not know why the body was aborted and have
to guess. The response is probably irrelevant if it was the HTTP client
that aborted the request. Thus, we are using ICAP_ERROR in hope that all
other cases are ICAP-related. If there are exceptions, we may confuse
admins and developers.
Merged from the squid3-icap branch.
Members:
src/http.cc:1.525->1.526
Index: squid3/src/http.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/http.cc,v
retrieving revision 1.525
retrieving revision 1.526
diff -u -r1.525 -r1.526
--- squid3/src/http.cc 19 Jun 2007 20:27:00 -0000 1.525
+++ squid3/src/http.cc 19 Jun 2007 21:19:04 -0000 1.526
@@ -1,6 +1,6 @@
/*
- * $Id: http.cc,v 1.525 2007/06/19 20:27:00 rousskov Exp $
+ * $Id: http.cc,v 1.526 2007/06/19 21:19:04 rousskov Exp $
*
* DEBUG: section 11 Hypertext Transfer Protocol (HTTP)
* AUTHOR: Harvest Derived
@@ -1938,7 +1938,7 @@
if (fd >= 0) {
comm_close(fd);
return;
- }
+ }
fwd->handleUnregisteredServerEnd();
delete this;
++++++ 10861.patch ++++++
---------------------
PatchSet 10861
Date: 2007/06/19 22:01:11
Author: hno
Branch: HEAD
Tag: (none)
Log:
ufsdump needs a bit of dependencies or parallell builds may fail
Members:
src/Makefile.am:1.182->1.183
Index: squid3/src/Makefile.am
===================================================================
RCS file: /cvsroot/squid/squid3/src/Makefile.am,v
retrieving revision 1.182
retrieving revision 1.183
diff -u -r1.182 -r1.183
--- squid3/src/Makefile.am 29 May 2007 13:31:38 -0000 1.182
+++ squid3/src/Makefile.am 19 Jun 2007 22:01:11 -0000 1.183
@@ -1,7 +1,7 @@
#
# Makefile for the Squid Object Cache server
#
-# $Id: Makefile.am,v 1.182 2007/05/29 13:31:38 amosjeffries Exp $
+# $Id: Makefile.am,v 1.183 2007/06/19 22:01:11 hno Exp $
#
# Uncomment and customize the following to suit your needs:
#
@@ -658,7 +658,9 @@
@XTRA_LIBS@ \
@EPOLL_LIBS@ \
@MINGW_LIBS@
-squid_DEPENDENCIES = $(top_builddir)/lib/libmiscutil.a @STORE_OBJS@ @STORE_LINKOBJS@ \
+squid_DEPENDENCIES = $(top_builddir)/lib/libmiscutil.a \
+ @STORE_OBJS@ \
+ @STORE_LINKOBJS@ \
@DISK_LIBS@ \
@DISK_LINKOBJS@ \
@REPL_OBJS@ \
@@ -891,7 +893,16 @@
@XTRA_LIBS@ \
@EPOLL_LIBS@ \
@MINGW_LIBS@
-ufsdump_DEPENDENCIES = $(top_builddir)/lib/libmiscutil.a
+ufsdump_DEPENDENCIES = $(top_builddir)/lib/libmiscutil.a \
+ @STORE_OBJS@ \
+ @STORE_LINKOBJS@ \
+ @DISK_LIBS@ \
+ @DISK_LINKOBJS@ \
+ @REPL_OBJS@ \
+ @AUTH_LINKOBJS@ \
+ @AUTH_OBJS@ \
+ @ICAP_LIBS@
+
nodist_ufsdump_SOURCES = \
repl_modules.cc \
cf_parser.h \
++++++ 10862.patch ++++++
---------------------
PatchSet 10862
Date: 2007/06/20 00:10:40
Author: hno
Branch: HEAD
Tag: (none)
Log:
Bootstrapped
Members:
src/Makefile.in:1.424->1.425
Index: squid3/src/Makefile.in
===================================================================
RCS file: /cvsroot/squid/squid3/src/Makefile.in,v
retrieving revision 1.424
retrieving revision 1.425
diff -u -r1.424 -r1.425
@@ -2284,7 +2284,9 @@
@EPOLL_LIBS@ \
@MINGW_LIBS@
-squid_DEPENDENCIES = $(top_builddir)/lib/libmiscutil.a @STORE_OBJS@ @STORE_LINKOBJS@ \
+squid_DEPENDENCIES = $(top_builddir)/lib/libmiscutil.a \
+ @STORE_OBJS@ \
+ @STORE_LINKOBJS@ \
@DISK_LIBS@ \
@DISK_LINKOBJS@ \
@REPL_OBJS@ \
@@ -2503,7 +2505,16 @@
@EPOLL_LIBS@ \
@MINGW_LIBS@
-ufsdump_DEPENDENCIES = $(top_builddir)/lib/libmiscutil.a
+ufsdump_DEPENDENCIES = $(top_builddir)/lib/libmiscutil.a \
+ @STORE_OBJS@ \
+ @STORE_LINKOBJS@ \
+ @DISK_LIBS@ \
+ @DISK_LINKOBJS@ \
+ @REPL_OBJS@ \
+ @AUTH_LINKOBJS@ \
+ @AUTH_OBJS@ \
+ @ICAP_LIBS@
+
nodist_ufsdump_SOURCES = \
repl_modules.cc \
cf_parser.h \
++++++ 10863.patch ++++++
---------------------
PatchSet 10863
Date: 2007/06/23 20:48:35
Author: hno
Branch: HEAD
Tag: (none)
Log:
Add missing helpers/digest_auth/eDirectory/.cvsignore
Members:
helpers/digest_auth/eDirectory/.cvsignore:INITIAL->1.1
--- /dev/null Sat Jun 23 20:52:47 2007
+++ squid3/helpers/digest_auth/eDirectory/.cvsignore Sat Jun 23 20:52:47 2007
@@ -0,0 +1,3 @@
+.deps
+Makefile
+digest_edir_auth
++++++ 10865.patch ++++++
---------------------
PatchSet 10865
Date: 2007/06/23 21:08:39
Author: hno
Branch: HEAD
Tag: (none)
Log:
Author: Manu Garg
Bug #1968: Squid hangs occasionally when using DNS search paths
Squid 2.6 (tested with squid 2.6.1 and 2.6.5) hangs after running for some time
(could be from 5 min to 40 min on a busy server). Squid becomes unresponsive
and CPU usage becomes 90-100%. ltrace shows that it's continuously comparing
strings in an infinite loop:
strcmp("thumbnail.videoegg.com", "i12.ebaystatic.com") = -1
strcmp("thumbnail.videoegg.com", "i12.ebaystatic.com") = -1
strcmp("thumbnail.videoegg.com", "i12.ebaystatic.com") = -1
The problem seems to be in the way squid's internal DNS system (dns_internal.c)
keeps record of looked up but not yet answered DNS queries. This bug is hit
specifically when multiple search paths are used in /etc/resolv.conf.
Squid caches all dns queries before sending them to avoid duplicate queries for
the same name. (look at: idnsCacheQuery(q) and hash_table *idns_lookup_hash, in
dns_internal.c). This mechanism works well unless multiple search paths are
defined in /etc/resolv.conf. When multiple dns search paths are defined, same
query object is modified and next search path is concatenated to it's name.
This query is cached again and resent.
Problem is that the query is not unlinked before being cached and thus linked
again. Only the key of hash object (that's actually name) changes this time;
object itself remains same. This corrupts the hash table of looked up queries.
Members:
src/dns_internal.cc:1.100->1.101
Index: squid3/src/dns_internal.cc
===================================================================
RCS file: /cvsroot/squid/squid3/src/dns_internal.cc,v
retrieving revision 1.100
retrieving revision 1.101
diff -u -r1.100 -r1.101
--- squid3/src/dns_internal.cc 29 May 2007 13:31:39 -0000 1.100
+++ squid3/src/dns_internal.cc 23 Jun 2007 21:08:39 -0000 1.101
@@ -1,6 +1,6 @@
/*
- * $Id: dns_internal.cc,v 1.100 2007/05/29 13:31:39 amosjeffries Exp $
+ * $Id: dns_internal.cc,v 1.101 2007/06/23 21:08:39 hno Exp $
*
* DEBUG: section 78 DNS lookups; interacts with lib/rfc1035.c
* AUTHOR: Duane Wessels
@@ -967,6 +967,10 @@
}
rfc1035MessageDestroy(message);
+ if (q->hash.key) {
+ hash_remove_link(idns_lookup_hash, &q->hash);
+ q->hash.key = NULL;
+ }
q->start_t = current_time;
q->id = idnsQueryID();
rfc1035SetQueryID(q->buf, q->id);
++++++ 10866.patch ++++++
---------------------
PatchSet 10866
Date: 2007/06/24 00:10:39
Author: hno
Branch: HEAD
Tag: (none)
Log:
Bootstrapped
Members:
configure:1.540->1.541
Index: squid3/configure
===================================================================
RCS file: /cvsroot/squid/squid3/configure,v
retrieving revision 1.540
retrieving revision 1.541
diff -u -r1.540 -r1.541
--- squid3/configure 23 Jun 2007 20:50:10 -0000 1.540
+++ squid3/configure 24 Jun 2007 00:10:39 -0000 1.541
@@ -1,5 +1,5 @@
#! /bin/sh
-# From configure.in Revision.
+# From configure.in Revision: 1.459 .
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.59 for Squid Web Proxy 3.0.PRE6-CVS.
#
++++++ squid-beta-3.0.PRE6-array_bound.patch ++++++
--- squid-3.0.PRE6/src/snmp_core.cc.orig 2007-04-30 18:56:09.000000000 +0200
+++ squid-3.0.PRE6/src/snmp_core.cc 2007-07-04 16:22:13.741936668 +0200
@@ -825,7 +825,7 @@
} else {
identifier = name[*len - 1];
- while ((identifier != index[loop]) && (loop < TIME_INDEX_LEN))
+ while ((loop < TIME_INDEX_LEN) && (identifier != index[loop]))
loop++;
if (loop < TIME_INDEX_LEN - 1) {
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org