• Dan Schatzberg's avatar
    Fix ThreadCachedInt race condition · 6039ee41
    Dan Schatzberg authored
    Summary:
    Acquire a SharedMutex at ThreadExit to ensure that after unlinking the ThreadEntry from
    the list, future accessAllThreads() won't miss a destroying thread.
    
    This is quite a dangerous fix as it changes some lock ordering semantics. ThreadLocal
    elements are now destroyed while holding a lock, so if the destruction function
    acquires a different lock, ordering must be consistent with other
    uses of accessAllThreads().
    
    I've made accessAllThreads() an opt-in feature via a template parameter and changed
    all existing uses. I've also fixed a few lock ordering issues that arose due to this
    change.
    
    Reviewed By: andriigrynenko
    
    Differential Revision: D3931072
    
    fbshipit-source-id: 4d464408713184080079698df453b95873bb1a6c
    6039ee41
ThreadCachedInt.h 5.66 KB