Exemple #1
0
        private static TypedHeaderManager GetTypedHeaderManager(Type t)
        {
            TypedHeaderManager manager = null;
            bool flag = false;

            try
            {
                try
                {
                }
                finally
                {
                    cacheLock.AcquireReaderLock(0x7fffffff);
                    flag = true;
                }
                if (!cache.TryGetValue(t, out manager))
                {
                    cacheLock.UpgradeToWriterLock(0x7fffffff);
                    if (!cache.TryGetValue(t, out manager))
                    {
                        manager = (TypedHeaderManager)Activator.CreateInstance(GenericAdapterType.MakeGenericType(new Type[] { t }));
                        cache.Add(t, manager);
                    }
                }
            }
            finally
            {
                if (flag)
                {
                    cacheLock.ReleaseLock();
                }
            }
            return(manager);
        }
        static TypedHeaderManager GetTypedHeaderManager(Type t)
        {
            TypedHeaderManager result = null;

            bool lockHeld = false;

            try
            {
                try { }
                finally
                {
                    cacheLock.AcquireReaderLock(int.MaxValue);
                    lockHeld = true;
                }
                if (!cache.TryGetValue(t, out result))
                {
                    cacheLock.UpgradeToWriterLock(int.MaxValue);
                    if (!cache.TryGetValue(t, out result))
                    {
                        result = (TypedHeaderManager)Activator.CreateInstance(GenericAdapterType.MakeGenericType(t));
                        cache.Add(t, result);
                    }
                }
            }
            finally
            {
                if (lockHeld)
                {
                    cacheLock.ReleaseLock();
                }
            }

            return(result);
        }
        private static TypedHeaderManager GetTypedHeaderManager(Type t)
        {
            TypedHeaderManager result = null;

            bool readerLockHeld = false;
            bool writerLockHeld = false;

            try
            {
                try { }
                finally
                {
                    s_cacheLock.TryEnterUpgradeableReadLock(Timeout.Infinite);
                    readerLockHeld = true;
                }
                if (!s_cache.TryGetValue(t, out result))
                {
                    s_cacheLock.TryEnterWriteLock(Timeout.Infinite);
                    writerLockHeld = true;
                    if (!s_cache.TryGetValue(t, out result))
                    {
                        result = (TypedHeaderManager)Activator.CreateInstance(s_GenericAdapterType.MakeGenericType(t));
                        s_cache.Add(t, result);
                    }
                }
            }
            finally
            {
                if (writerLockHeld)
                {
                    s_cacheLock.ExitWriteLock();
                }
                if (readerLockHeld)
                {
                    s_cacheLock.ExitUpgradeableReadLock();
                }
            }

            return(result);
        }