bool CheckState(ThreadLockState state, int millisecondsTimeout, LockState validState) { if (disposed) { throw new ObjectDisposedException("ReaderWriterLockSlim"); } if (millisecondsTimeout < -1) { throw new ArgumentOutOfRangeException("millisecondsTimeout"); } // Detect and prevent recursion LockState ctstate = state.LockState; if (ctstate != LockState.None && noRecursion && (!ctstate.Has(LockState.Upgradable) || validState == LockState.Upgradable)) { throw new LockRecursionException("The current thread has already a lock and recursion isn't supported"); } if (noRecursion) { return(false); } // If we already had right lock state, just return if (ctstate.Has(validState)) { return(true); } CheckRecursionAuthorization(ctstate, validState); return(false); }