public void RegisterDynamicThreadStaticsInfo(RuntimeTypeHandle runtimeTypeHandle, uint offsetValue, int storageSize) { bool registered = false; Debug.Assert(offsetValue != 0 && storageSize > 0 && runtimeTypeHandle.IsDynamicType()); _threadStaticsLock.Acquire(); try { // Sanity check to make sure we do not register thread statics for the same type more than once uint temp; Debug.Assert(!_dynamicGenericsThreadStatics.TryGetValue(runtimeTypeHandle, out temp) && storageSize > 0); _dynamicGenericsThreadStatics.Add(runtimeTypeHandle, offsetValue); _dynamicGenericsThreadStaticSizes.Add(offsetValue, storageSize); registered = true; } finally { if (!registered) { _dynamicGenericsThreadStatics.Remove(runtimeTypeHandle); _dynamicGenericsThreadStaticSizes.Remove(offsetValue); } _threadStaticsLock.Release(); } }
private static void FetchSyntax(UriParser syntax, string lwrCaseSchemeName, int defaultPort) { if (syntax.SchemeName.Length != 0) { throw new InvalidOperationException(SR.Format(SR.net_uri_NeedFreshParser, syntax.SchemeName)); } lock (s_table) { syntax._flags &= ~UriSyntaxFlags.V1_UnknownUri; UriParser oldSyntax = null; s_table.TryGetValue(lwrCaseSchemeName, out oldSyntax); if (oldSyntax != null) { throw new InvalidOperationException(SR.Format(SR.net_uri_AlreadyRegistered, oldSyntax.SchemeName)); } s_tempTable.TryGetValue(syntax.SchemeName, out oldSyntax); if (oldSyntax != null) { // optimization on schemeName, will try to keep the first reference lwrCaseSchemeName = oldSyntax._scheme; s_tempTable.Remove(lwrCaseSchemeName); } syntax.OnRegister(lwrCaseSchemeName, defaultPort); syntax._scheme = lwrCaseSchemeName; syntax.CheckSetIsSimpleFlag(); syntax._port = defaultPort; s_table[syntax.SchemeName] = syntax; } }