• Giuseppe Ottaviano's avatar
    Disable non-const access from upgrade locks · a238a687
    Giuseppe Ottaviano authored
    Summary:
    Upgrade locks allow access concurrently with readers, so mutating the state under an upgrade lock can potentially introduce a race unless proven otherwise.
    The main goal of this diff is to make the accessors to `Synchronized` state `const` under upgrade lock, as it happens under a shared lock. To achieve so, the diff changes the mechanism by which `const` is added: instead of unconditionally closing a `const Synchronized` in the `LockedPtr`, it captures the same constness as the `Synchronized`, and then the `const` decision is done at access time.
    
    This enables having an extra method `asNonConstUnsafe()` that gives non-const access when needed without requiring a `const_cast`. This is now provided for shared locks as well.
    
    Reviewed By: yfeldblum, aary, davidtgoldblatt
    
    Differential Revision: D13817413
    
    fbshipit-source-id: 8c315a925db9b1da8821984c59e55e90571b194e
    a238a687
SynchronizedTest.cpp 29.8 KB