I feel like this behaviour might be better modeled by calling `cast::forget()` in `downgrade` to truly consume the `RWLockWriteGuard`?