[Varnish] #1162: ban lurker races against HSH_Unbusy()

Varnish varnish-bugs at varnish-cache.org
Wed Jul 4 12:53:13 CEST 2012


#1162: ban lurker races against HSH_Unbusy()
----------------------+-----------------------------------------------------
 Reporter:  martin    |       Owner:       
     Type:  defect    |      Status:  new  
 Priority:  normal    |   Milestone:       
Component:  varnishd  |     Version:  trunk
 Severity:  normal    |    Keywords:       
----------------------+-----------------------------------------------------
 The ban lurker can raise against HSH_Unbusy(), and try to get the object
 of an objcore that is still flagged as busy causing assertion.

 This is particularly visible in 3.0, when using 'do_stream = true;', as
 the object will be inserted in the ban list on creation, but not unbusyied
 until after the fetch has finished.

 It applies to current trunk as well, and also when do_stream isn't set,
 but the window of race is much smaller.

 {{{
 ***  v1    2.5 debug| Child (30452) Panic message: Assert error in
 oc_getobj(), cache/cache.h line 436:\n
 ***  v1    2.5 debug|   Condition((oc->flags & (1<<1)) == 0) not true.\n
 ***  v1    2.5 debug| thread = (ban-lurker)\n
 ***  v1    2.5 debug| ident =
 Linux,3.2.0-26-generic,x86_64,-sfile,-smalloc,-hcritbit,epoll\n
 ***  v1    2.5 debug| Backtrace:\n
 ***  v1    2.5 debug|   0x43cce7: pan_backtrace+28\n
 ***  v1    2.5 debug|   0x43cfe0: pan_ic+1bd\n
 ***  v1    2.5 debug|   0x413981: oc_getobj+c9\n
 ***  v1    2.5 debug|   0x4168f6: ban_lurker_work+528\n
 ***  v1    2.5 debug|   0x416cbd: ban_lurker+dd\n
 ***  v1    2.5 debug|   0x4524ec: wrk_bgthread+103\n
 ***  v1    2.5 debug|   0x7fd6d1162e9a: _end+7fd6d0ab7662\n
 ***  v1    2.5 debug|   0x7fd6d0e904bd: _end+7fd6d07e4c85\n
 }}}

-- 
Ticket URL: <https://www.varnish-cache.org/trac/ticket/1162>
Varnish <https://varnish-cache.org/>
The Varnish HTTP Accelerator




More information about the varnish-bugs mailing list