Disable non-const access from upgrade locks
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
Showing
Please register or sign in to comment