Re: Squid-SMP problems in current trunk

From: Christos Tsantilas <christos_at_chtsanti.net>
Date: Mon, 18 Jul 2011 20:03:22 +0300

On 07/18/2011 01:04 PM, Tsantilas Christos wrote:
> On 07/16/2011 07:11 AM, Amos Jeffries wrote:
>> On 16/07/11 07:43, Tsantilas Christos wrote:
>>> But now I am hitting the following assertion:
>>> assertion failed: Connection.cc:29: "fd < 0"
>>> The later problem looks that it has to do with file descriptors of the
>>> listening sockets.
>>
>> "fd < 0" indicates something is failing to call conn->close() when
>> abandoning an open socket.
>>
>> NP: close() is reentrant. So components can and should always close()
>> when they are sure the FD/socket must no longer be used.
>>
>> I'm not very certain about SMP listening sockets, which process(es) are
>> safe to close() on reconfigure/shutdown? the unsafe ones must do fd=-1
>> to abandon the FD information explicitly before the conn object
>> destructs.
>>
>> What situations are you hitting "fd < 0" Christos?
>
> I am hitting this assertion on kids immediately after start.
> Looks that the connection looses all references on its self and deleted.
> The socked of the connection is a listening socket.

When a kid starting get from the parent the filedescriptors of
listening sockets, and creates a Comm::Connection objects for these
filedescriptors.

What needed here is to assign the created Comm::Connection objects to
the related http_port_list object (to increase the refcount and keep the
connection open)

A way to implement the above is to use the ListeningStartedDialer class
implemented in client_side.cc file.

I am attaching a patch which solves this problem and allow smp-squid
start and serve HTTP requests, but there are similar or related bugs in
icp and snmp. When I am defining icp_port and snmp_port in squid.conf
the smp-squid does not start.

>
> This is a backtrace:
> #0 0x00007f0c3210ea75 in *__GI_raise (sig=<value optimized out>)
> at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
> #1 0x00007f0c321125c0 in *__GI_abort () at abort.c:92
> #2 0x00000000005128f5 in xassert (msg=0x4955 <Address 0x4955 out of
> bounds>,
> file=0x1208120 "\230\236E2\f\177", line=29) at debug.cc:567
> #3 0x0000000000656239 in ~Connection (this=0x10fb530,
> __in_chrg=<value optimized out>, __vtt_parm=<value optimized out>)
> at Connection.cc:29
> #4 0x00000000004fbb04 in ~ListeningStartedDialer (this=0x10e6fd0,
> __in_chrg=<value optimized out>, __vtt_parm=<value optimized out>)
> at client_side.cc:144
> #5 ~AsyncCallT (this=0x10e6fd0, __in_chrg=<value optimized out>,
> __vtt_parm=<value optimized out>) at ../src/base/AsyncCall.h:133
> #6 0x0000000000608dcf in RefCount<AsyncCall>::dereference (
> this=<value optimized out>) at ../../include/RefCount.h:96
> #7 ~RefCount (this=<value optimized out>) at ../../include/RefCount.h:52
> #8 AsyncCallQueue::fireNext (this=<value optimized out>)
> at AsyncCallQueue.cc:55
> #9 0x0000000000608ef0 in AsyncCallQueue::fire (this=0xed3d90)
> at AsyncCallQueue.cc:40
> #10 0x00000000005204bc in EventLoop::runOnce (this=0x7fffc79e0080)
> at EventLoop.cc:131
> #11 0x0000000000520598 in EventLoop::run (this=0x7fffc79e0080)
> at EventLoop.cc:95
> #12 0x00000000005798a5 in SquidMain (argc=<value optimized out>,
> argv=0x7fffc79e0248) at main.cc:1506
> #13 0x000000000057a0a6 in SquidMainSafe (argc=18773, argv=0x4955)
> at main.cc:1239
>
>
>
>>
>> Amos
>
>

-- 
Tsantilas Christos
Network and Systems Engineer
email:christos_at_chtsanti.net
   web:http://www.chtsanti.net
Phone:+30 6977678842

Received on Tue Jul 19 2011 - 00:11:34 MDT

This archive was generated by hypermail 2.2.0 : Tue Jul 19 2011 - 12:00:03 MDT