Child panics on OpenSolaris

Nils Goroll slink at
Mon Feb 15 13:31:20 CET 2010


> Child (3504) died signal=6
> Child (3504) 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)) == 0) not true.
> errno = 9 (Bad file number)
> thread = (cache-worker)
> ident = -smalloc,-hcritbit,poll
> Backtrace:
>   4457db: /opt/sbin/varnishd'pan_backtrace+0x1b [0x4457db]
>   445ae5: /opt/sbin/varnishd'pan_ic+0x1c5 [0x445ae5]
>   fffffd7ff2efdfec: /opt/lib/'TCP_nonblocking+0x7c
> [0xfffffd7ff2efdfec]
>   419091: /opt/sbin/varnishd'vca_return_session+0x1b1 [0x419091]
>   426aad: /opt/sbin/varnishd'cnt_wait+0x2bd [0x426aad]
>   42bc3a: /opt/sbin/varnishd'CNT_Session+0x4ba [0x42bc3a]
>   44835b: /opt/sbin/varnishd'wrk_do_cnt_sess+0x19b [0x44835b]
>   447954: /opt/sbin/varnishd'wrk_thread_real+0x854 [0x447954]
>   447eb3: /opt/sbin/varnishd'wrk_thread+0x123 [0x447eb3]

Just an idea from checking differences between the code I use and trunk: In 
cnt_wait, shouldn't we check pfd[0].revents for POLLERR and POLLHUP? Could it be 
that Solaris assumes that delivery an error once should suffice, so further use 
of the fd will return EBADF?

Again, I haven't investigated further, sorry for the noise if this turns out to 
be stupid.


More information about the varnish-misc mailing list