• Andrii Grynenko's avatar
    Fix races in TLRefCount · bccbb102
    Andrii Grynenko authored
    Summary:
    This fixes 2 races in TLRefCount:
    1. Thread-local constructor race, exposed by the stress test. It was possible for LocalRefCount to be created (grabbing collectGuard), but not be added to the thread-local list, so that accessAllThreads wasn't collecting it. collectAll() was then blocking waiting on baton to be posted, causing a dead-lock.
    2. LocalRefCount::count_ has to be made atomic, because otherwise += operation may be not flushed (nbronson explained the race in D3133443).
    
    Reviewed By: djwatson
    
    Differential Revision: D3166956
    
    fb-gh-sync-id: 17d58a215ebfc572f8316ed46bafaa5e6a9e2368
    fbshipit-source-id: 17d58a215ebfc572f8316ed46bafaa5e6a9e2368
    bccbb102
RefCountTest.cpp 2.62 KB