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); }