Child panics on OpenSolaris

Poul-Henning Kamp phk at phk.freebsd.dk
Wed Feb 17 11:57:22 CET 2010


In message <282e72051002170230k7ae8e0c8hc2d5226ca9288d51 at mail.gmail.com>, Paul 
Wright writes:

>I've compiled with the additional -mt flag, here's my current
>compilation process:

Please pull a brand new -trunk, I have added a check for errno 
working and I would like to make sure that passes for you also.

>Child (14052) Panic message: Assert error in TCP_nonblocking(), tcp.c line =
>172:
>  Condition((ioctl(sock, ((int)((uint32_t)(0x80000000|(((sizeof
>(int))&0xff)<<16)| ('f'<<8)|126))), &i)) =3D=3D 0) not true.
>errno =3D 131 (Connection reset by peer)


Now, _this_ errno I can actually belive, because that matches
the packet traces we have seen, and it is a plausible scenario.

The fact that Solaris docs does not mention ECONNRESET as a legal
error return for ioctl is a minor detail in that context.

The difference here is that the traditional BSD stack does not
return ECONNRESET until you try to move data on the socket,
giving you much simpler error checking on socket-state changes
(ioctl, fcntl, setsockopt, getsockopt etc)

So now that we have reached the root-cause, I need to go through
and do complex error-checking for all the socket-state calls.

Hopefully done later today...

-- 
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
phk at FreeBSD.ORG         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe    
Never attribute to malice what can adequately be explained by incompetence.


More information about the varnish-misc mailing list