Example #1
0
 public static void EnterWriteLock(Original::ReaderWriterLockSlim @lock)
 {
     Helper.WrapAcquire(
         delegate() { @lock.EnterWriteLock(); return(false); },
         delegate() { return(@lock.TryEnterWriteLock(0)); },
         @lock,
         MSyncVarOp.LOCK_ACQUIRE,
         "ReaderWriterLockSlim.EnterWriteLock"
         );
 }
Example #2
0
        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;
            }));
        }