• Poul-Henning Kamp's avatar
    Close what might be a race, and assert that it doesn't happen: · 1afa1e8d
    Poul-Henning Kamp authored
    When we do a lookup, we first try without the lock, if this gives
    us a refcnt==0 objhead, we try again, with the lock.
    
    When we deref an objhead, we would decrement the refcnt, holding oh->mtx,
    then lock the critbit-lock and remove it from the tree.
    
    It might be possible for a locked lookup to find an oh we just decremented
    the refcnt off, and we did not check for refcnt==0 in that case.
    
    Fix this, by removing the oh from the tree, holding the critbit-lock,
    before decrementing the refcnt.  This way, a locked lookup can never
    find a refcnt==0 oh in the tree, and the unlocked lookup still catches
    this with the refcnt==0 check.
    
    
    
    
    git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@4549 d4fa192b-c00b-0410-8231-f00ffab90ce4
    1afa1e8d
Name
Last commit
Last update
..
Makefile.am Loading commit data...
acct_fields.h Loading commit data...
c.sh Loading commit data...
cache.h Loading commit data...
cache_acceptor.c Loading commit data...
cache_backend.c Loading commit data...
cache_backend.h Loading commit data...
cache_backend_cfg.c Loading commit data...
cache_backend_poll.c Loading commit data...
cache_backend_poll.h Loading commit data...
cache_ban.c Loading commit data...
cache_ban.h Loading commit data...
cache_center.c Loading commit data...
cache_cli.c Loading commit data...
cache_dir_random.c Loading commit data...
cache_dir_round_robin.c Loading commit data...
cache_esi.c Loading commit data...
cache_expire.c Loading commit data...
cache_fetch.c Loading commit data...
cache_hash.c Loading commit data...
cache_http.c Loading commit data...
cache_httpconn.c Loading commit data...
cache_lck.c Loading commit data...
cache_main.c Loading commit data...
cache_panic.c Loading commit data...
cache_pipe.c Loading commit data...
cache_pool.c Loading commit data...
cache_response.c Loading commit data...
cache_session.c Loading commit data...
cache_vary.c Loading commit data...
cache_vcl.c Loading commit data...
cache_vrt.c Loading commit data...
cache_vrt_re.c Loading commit data...
cache_waiter.h Loading commit data...
cache_waiter_epoll.c Loading commit data...
cache_waiter_kqueue.c Loading commit data...
cache_waiter_poll.c Loading commit data...
cache_waiter_ports.c Loading commit data...
cache_wrw.c Loading commit data...
cache_ws.c Loading commit data...
common.h Loading commit data...
default.vcl Loading commit data...
flint.lnt Loading commit data...
flint.sh Loading commit data...
hash_classic.c Loading commit data...
hash_critbit.c Loading commit data...
hash_simple_list.c Loading commit data...
hash_slinger.h Loading commit data...
heritage.h Loading commit data...
instance.c Loading commit data...
mgt.h Loading commit data...
mgt_child.c Loading commit data...
mgt_cli.c Loading commit data...
mgt_cli.h Loading commit data...
mgt_param.c Loading commit data...
mgt_pool.c Loading commit data...
mgt_vcc.c Loading commit data...
rfc2616.c Loading commit data...
s.sh Loading commit data...
shmlog.c Loading commit data...
steps.h Loading commit data...
stevedore.c Loading commit data...
stevedore.h Loading commit data...
stevedore_utils.c Loading commit data...
storage_file.c Loading commit data...
storage_malloc.c Loading commit data...
storage_persistent.c Loading commit data...
storage_synth.c Loading commit data...
storage_umem.c Loading commit data...
varnishd.1 Loading commit data...
varnishd.c Loading commit data...
vclflint.lnt Loading commit data...
vclflint.sh Loading commit data...
vparam.h Loading commit data...