On Fri, May 10, 2019 at 01:38:19PM +0100, Stuart Henderson wrote:
> On 2019/05/10 11:45, Matthieu Herrb wrote:
> > Hi,
> > 
> > I recently upgraded the squid cache at work to OpenBSD 6.5 (and thus
> > squid 4.6). After this, squid started locking up (and not accepting
> > new connections) every few hours with the error below logged in
> > cache.log:
> > 
> > oldAccept  FD 17, [::] [ job1]: ignoring: (53) Software caused
> > connection abort
> > 
> > After digging a bit in the source code and reading about ECONNREFUSED
> > and accept(), I came out with the patch below, which fixes the issue
> > for me. The patch was done on 6.5, but the squid port is the same in
> > -current for now.
> > 
> > Does this look ok ?
New version based on your comments and the ones from upstreams.

Index: Makefile
===================================================================
RCS file: /cvs/OpenBSD/ports/www/squid/Makefile,v
retrieving revision 1.213
diff -u -p -u -r1.213 Makefile
--- Makefile    20 Feb 2019 16:23:27 -0000      1.213
+++ Makefile    10 May 2019 19:37:14 -0000
@@ -10,6 +10,7 @@ EXTRACT_SUFX= .tar.xz
 PKGNAME-main=  squid-$V
 PKGNAME-ldap=  squid-ldap-$V
 PKGNAME-ntlm=  squid-ntlm-$V
+REVISION-main= 0
 
 CATEGORIES=    www
 
Index: patches/patch-src_comm_TcpAcceptor_cc
===================================================================
RCS file: patches/patch-src_comm_TcpAcceptor_cc
diff -N patches/patch-src_comm_TcpAcceptor_cc
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_comm_TcpAcceptor_cc       10 May 2019 19:35:40 -0000
@@ -0,0 +1,16 @@
+$OpenBSD$
+
+Patch for locksup observed when accept() returns ECONNABORTED
+
+Index: src/comm/TcpAcceptor.cc
+--- src/comm/TcpAcceptor.cc.orig
++++ src/comm/TcpAcceptor.cc
+@@ -361,7 +361,7 @@ Comm::TcpAcceptor::oldAccept(Comm::ConnectionPointer 
&details)
+ 
+         PROF_stop(comm_accept);
+ 
+-        if (ignoreErrno(errcode)) {
++        if (ignoreErrno(errcode) || ECONNABORTED == errcode) {
+             debugs(50, 5, status() << ": " << xstrerr(errcode));
+             return Comm::NOMESSAGE;
+        } else if (ENFILE == errno || EMFILE == errno) {

-- 
Matthieu Herrb

Reply via email to