public static void EnterUpgradeableReadLock(Original::ReaderWriterLockSlim @lock) { Helper.WrapAcquire( delegate() { @lock.EnterUpgradeableReadLock(); return(false); }, delegate() { return(@lock.TryEnterUpgradeableReadLock(0)); }, @lock, MSyncVarOp.LOCK_ACQUIRE, "ReaderWriterLockSlim.EnterUpgradeableReadLock" ); }
public static bool TryEnterRaw(Original::ReaderWriterLockSlim @lock, int millisecondsTimeout, string name, MODE mode) { if (@lock == null) { throw new ArgumentNullException(); } if (millisecondsTimeout < 0 && millisecondsTimeout != Timeout.Infinite) { throw new ArgumentOutOfRangeException(); } return(Helper.SimpleWrap <bool>( delegate(ClrSyncManager manager) { bool b; while (true) { try { manager.SetMethodInfo(name); manager.SyncVarAccess(@lock, MSyncVarOp.LOCK_ACQUIRE); if (mode == MODE.READ) { b = @lock.TryEnterReadLock(0); } else if (mode == MODE.UPGRADEABLE_READ) { b = @lock.TryEnterUpgradeableReadLock(0); } else { b = @lock.TryEnterWriteLock(0); } if (!b && millisecondsTimeout == Timeout.Infinite) { manager.LocalBacktrack(); continue; } } catch (Exception e) { manager.CommitSyncVarAccess(); throw e; } if (!b) { manager.MarkTimeout(); } manager.CommitSyncVarAccess(); break; } return b; }, delegate() { bool b; if (mode == MODE.READ) { b = @lock.TryEnterReadLock(millisecondsTimeout); } else if (mode == MODE.UPGRADEABLE_READ) { b = @lock.TryEnterUpgradeableReadLock(millisecondsTimeout); } else { b = @lock.TryEnterWriteLock(millisecondsTimeout); } return b; })); }