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 ?
Thanks for digging - OK. Would you mind either doing a PR (https://wiki.squid-cache.org/MergeProcedure) or bringing it up on squid-dev please? > Index: Makefile > =================================================================== > RCS file: /cvs/ports/www/squid/Makefile,v > retrieving revision 1.213 > diff -u -r1.213 Makefile > --- Makefile 20 Feb 2019 16:23:27 -0000 1.213 > +++ Makefile 10 May 2019 09:07:33 -0000 > @@ -10,6 +10,7 @@ > PKGNAME-main= squid-$V > PKGNAME-ldap= squid-ldap-$V > PKGNAME-ntlm= squid-ntlm-$V > +REVISION= 0 REVISION-main=0 would be enough, but ok either way. > 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 09:07:33 -0000 > @@ -0,0 +1,16 @@ > +$OpenBSD$ > + > +Patch for locksup observed when accept() returns ECONNABORTED > + > +--- src/comm/TcpAcceptor.cc.orig Tue Feb 19 03:46:22 2019 > ++++ src/comm/TcpAcceptor.cc Fri May 10 11:01:05 2019 > +@@ -369,6 +369,9 @@ > + if (ignoreErrno(errcode)) { > + debugs(50, 5, status() << ": " << xstrerr(errcode)); > + return Comm::NOMESSAGE; > ++ } else if (ECONNABORTED == errno) { > ++ debugs(50, DBG_IMPORTANT, MYNAME << status() << ": ignoring: " << > xstrerr(errcode)); > ++ return Comm::NOMESSAGE; > + } else if (ENFILE == errno || EMFILE == errno) { > + debugs(50, 3, status() << ": " << xstrerr(errcode)); > + return Comm::COMM_ERROR; > > -- > Matthieu Herrb
