• Nils Goroll's avatar
    fellow_storage: Handle inconsistency of ObjWaitExtend() vs boc->state · 90f393f4
    Nils Goroll authored
    No matter when we read the boc state, before or after ObjWaitExtend(),
    we might read an inconsistent, outdated or too fresh, value with respect
    to the available bytes returned by ObjWaitExtend(), because our read
    does not happen from the critical region of ObjWaitExtend().
    
    We work around this issue with two changes:
    
    - in fellow_stream_wait(), call ObjWaitExtend again if the state as
      seen from outside ObjWaitExtend() changes.
    
    - in fellow_stream_f(), use ObjWaitState() to ensure that the busy
      object is done when we are called with OBJ_ITER_END, which means
      that we are called on the last fcs.
    
    Should fix #44 - please open if not
    90f393f4
fellow_storage.c 73.3 KB