Exemple #1
0
        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);
        }