[Varnish] #228: Varnish crashes on assert error in Tcheck

Varnish varnish-bugs at projects.linpro.no
Fri Apr 18 14:49:47 CEST 2008


#228: Varnish crashes on assert error in Tcheck
----------------------+-----------------------------------------------------
 Reporter:  anders    |       Owner:  phk                              
     Type:  defect    |      Status:  new                              
 Priority:  high      |   Milestone:                                   
Component:  varnishd  |     Version:  trunk                            
 Severity:  normal    |    Keywords:  varnish crash assert error Tcheck
----------------------+-----------------------------------------------------
 I am running Varnish trunk/2629 on FreeBSD/amd64 7.0-RELEASE (with
 SCHED_ULE), on Intel hardware. After running for around half an hour, I
 got a crash:

 {{{
 Child said (2, 880): <<Assert error in Tcheck(), cache.h line 661:>>
 Child said (2, 880): <<  Condition((t.b) != 0) not true.>>
 Child said (2, 880): <<  errno = 35 (Resource temporarily unavailable)>>
 }}}

 Backtrace:

 {{{
 (gdb) bt
 #0  0x0000000800d0cfec in thr_kill () from /lib/libc.so.7
 #1  0x0000000800d96c5b in abort () from /lib/libc.so.7
 #2  0x000000080066dcaf in lbv_assert (func=Variable "func" is not
 available.
 ) at assert.c:65
 #3  0x0000000000412fe3 in Tcheck (t={b = 0x0, e = 0x0}) at cache.h:661
 #4  0x0000000000413674 in http_findhdr (hp=0x8f92268b8, l=Variable "l" is
 not available.
 ) at cache_http.c:210
 #5  0x000000000041375b in http_GetHdr (hp=0x8f92268b8,
     hdr=0x539456 "\bExpires:", ptr=0x7ffff399b9f8) at cache_http.c:232
 #6  0x00000000004289c8 in RFC2616_Ttl (sp=0x8215f6008, hp=0x8f92268b8,
     obj=0x8f9226800) at rfc2616.c:138
 #7  0x0000000000428c1e in RFC2616_cache_policy (sp=0x8215f6008,
 hp=0x8f92268b8)
     at rfc2616.c:195
 #8  0x000000000040c77c in cnt_fetch (sp=0x8215f6008) at cache_center.c:342
 #9  0x000000000040d462 in CNT_Session (sp=0x8215f6008) at steps.h:41
 #10 0x00000000004172c8 in wrk_do_one (w=0x7ffff399dad0) at
 cache_pool.c:194
 #11 0x000000000041758d in wrk_thread (priv=0x800f11240) at
 cache_pool.c:247
 #12 0x0000000800a94a88 in pthread_getprio () from /lib/libthr.so.3
 #13 0x0000000000000000 in ?? ()
 Cannot access memory at address 0x7ffff399e000
 (gdb) frame 3
 #3  0x0000000000412fe3 in Tcheck (t={b = 0x0, e = 0x0}) at cache.h:661
 661             AN(t.b);
 (gdb) print t.b
 $1 = 0x0
 (gdb) frame 4
 #4  0x0000000000413674 in http_findhdr (hp=0x8f92268b8, l=Variable "l" is
 not available.
 ) at cache_http.c:210
 210                     Tcheck(hp->hd[u]);
 (gdb) print *hp
 $2 = {magic = 1680389577, ws = 0x8f9226828, conds = 0 '\0', logtag =
 HTTP_Obj,
   status = 301, hd = {{b = 0x0, e = 0x0}, {b = 0x0, e = 0x0}, {
       b = 0x8f9226b48 "HTTP/1.1", e = 0x8f9226b50 ""}, {b = 0x8f9226b51
 "301",
       e = 0x8f9226b54 ""}, {b = 0x8f9226b55 "Moved Permanently",
       e = 0x8f9226b66 ""}, {
       b = 0x8f9226b67 "Date: Fri, 18 Apr 2008 12:20:45 GMT",
       e = 0x8f9226b8a ""}, {
       b = 0x8f9226b8b "Server: Apache/2.2.3 (Debian) Resin/3.0.25",
       e = 0x8f9226bb5 ""}, {b = 0x8f9226bb6 "Pragma: no-cache",
       e = 0x8f9226bc6 ""}, {b = 0x8f9226bc7 "Cache-Control: no-cache",
       e = 0x8f9226bde ""}, {
       b = 0x8f9226bdf "Location:
 /finn/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojsp/gojs"...,
       e = 0x8f9226fe6 ""}, {b = 0x0, e = 0x0}, {
       b = 0x8f9226fe7 "Content-Type: text/plain", e = 0x8f9226fff ""}, {
       b = 0x0, e = 0x0} <repeats 20 times>}, hdf = '\0' <repeats 31
 times>,
   nhd = 12}
 }}}

 This happened after reducing obj.workspace from 4K to 2K, so it might be
 an object that is too big?

 It would be very nice to be able to log the objects that are too big. The
 one I see here in *hp seems to be have bogus Location field, and should be
 fixed.

-- 
Ticket URL: <http://varnish.projects.linpro.no/ticket/228>
Varnish <http://varnish.projects.linpro.no/>
The Varnish HTTP Accelerator


More information about the varnish-bugs mailing list