• Nils Goroll's avatar
    Fix and radically simplify logbuffer_wait_flush_fini() · c1dbbbf2
    Nils Goroll authored
    The dance of taking a reference when waiting caused a lot of trouble
    already before, and with a fresh look at it does not seem to make much
    sense. But most importantly, it was wrong:
    
    lbuf->ff was set to NULL in logbuffer_flush_finish_work_one() before
    the mutex was returned with pthread_cond_wait(), so
    
    	if (ff == NULL)
    		goto unlock;
    
    in logbuffer_wait_flush_fini() could lead to the function returning
    before logbuffer_flush_finish_work_one() _was_ actually done.
    
    But with bceec122 this could lead
    to the stack memory being repurposed (logbuffer_flush_finish
    returning) before it was actually safe to.
    
    This issue could surface in fellow_log_test hanging.
    
    We also now return all allocations under the lock to prevent a race
    with fellow_log_close() where flush finish threads could outlive the
    ffd, resulting in buddy leak detection to fire, because the ff
    allocation was not returned.
    
    Fixes #49
    c1dbbbf2
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...
bitf_segmentation.h Loading commit data...
bitf_segmentation_test.c 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...