• Nils Goroll's avatar
    Fix races for streaming busy objects · aca69dac
    Nils Goroll authored
    For streaming busy objects, we basically rely on the varnish-cache
    ObjExtend() / ObjWaitExtend() API to never read past the object: In
    fellow_stream_f(), we always wait for more data (or the end of the
    object) before returning, such that fellow_cache_obj_iter(), which
    iterates over segments, should never touch a segment past the final
    FCS_BUSY segment.
    
    Yet - it did, by means of the read-ahead and the peek-ahead to determine
    whether or not OBJ_ITER_END should be signaled.
    
    We fix this issue by reading/peeking ahead only for segments with a
    state beyond FCS_BUSY.
    
    There is now also extensive test infrastructure to specifically test
    concurrent access ti busy objects. To keep layers separate,
    fellow_cache_test uses a lightweight signal/wait implementation
    analogous to the ObjExtend() / ObjWaitExtend() Varnish-Cache
    interface.
    
    An earlier version of t_busyobj() had run on my dev laptop for 3.5
    hours without crashing, while without the fixes it had run into
    assertion failures within seconds.
    
    Fixes #35 and #36 (I hope)
    aca69dac
Name
Last commit
Last update
..
foreign Loading commit data...
tbl Loading commit data...
vtc Loading commit data...
Makefile.am Loading commit data...
VSC_buddy.vsc Loading commit data...
VSC_fellow.vsc Loading commit data...
aux_cache_wrk.c Loading commit data...
bitf.h Loading commit data...
bitsof.h Loading commit data...
buddy.c Loading commit data...
buddy.h Loading commit data...
buddy_storage.c Loading commit data...
buddy_storage.h Loading commit data...
buddy_tune.c Loading commit data...
buddy_tune.h Loading commit data...
buddy_util.h Loading commit data...
buddy_witness.h Loading commit data...
compiler.h Loading commit data...
debug.h Loading commit data...
fcs_states.doth Loading commit data...
fellow_cache.c Loading commit data...
fellow_cache.h Loading commit data...
fellow_cache_storage.h Loading commit data...
fellow_const.h Loading commit data...
fellow_debug.h Loading commit data...
fellow_diag.h Loading commit data...
fellow_errhandling.h Loading commit data...
fellow_hash.c Loading commit data...
fellow_hash.h Loading commit data...
fellow_hashes.h Loading commit data...
fellow_inject.h Loading commit data...
fellow_io.h Loading commit data...
fellow_io_aio.c Loading commit data...
fellow_io_backend.h Loading commit data...
fellow_io_ioctl.c Loading commit data...
fellow_io_ioctl.h Loading commit data...
fellow_io_threads.c Loading commit data...
fellow_io_uring.c Loading commit data...
fellow_log.c Loading commit data...
fellow_log.h Loading commit data...
fellow_log_dbg.c Loading commit data...
fellow_log_dle_chg.h Loading commit data...
fellow_log_iter_out.h Loading commit data...
fellow_log_storage.h Loading commit data...
fellow_log_test.c Loading commit data...
fellow_pri.h Loading commit data...
fellow_regionlist.h Loading commit data...
fellow_sha256.c Loading commit data...
fellow_sha256.h Loading commit data...
fellow_stash.h Loading commit data...
fellow_storage.c Loading commit data...
fellow_storage.h Loading commit data...
fellow_storage_deref.h Loading commit data...
fellow_task.h Loading commit data...
fellow_testenv.c Loading commit data...
fellow_testenv.h Loading commit data...
fellow_tune.c Loading commit data...
fellow_tune.h Loading commit data...
flint.h Loading commit data...
flint.lnt Loading commit data...
pow2_units.c Loading commit data...
pow2_units.h Loading commit data...
slash-counters.rst Loading commit data...
slashmap.c Loading commit data...
slashmap.h Loading commit data...
slashmap.rst.in Loading commit data...
slashmap_options.h Loading commit data...
vmod_slash.c Loading commit data...
vmod_slash.man.rst Loading commit data...
vmod_slash.vcc Loading commit data...
vmod_slash_loadmasters.c Loading commit data...