Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / SharedStatics.cs / 1305376 / SharedStatics.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================================== ** ** Class: SharedStatics ** ** ** Purpose: Container for statics that are shared across AppDomains. ** ** =============================================================================*/ namespace System { using System.Threading; using System.Runtime.Remoting; using System.Security; using System.Security.Util; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using System.Diagnostics.Contracts; #if FEATURE_CAS_POLICY using StringMaker = System.Security.Util.Tokenizer.StringMaker; #endif // FEATURE_CAS_POLICY internal sealed class SharedStatics { // this is declared static but is actually forced to be the same object // for each AppDomain at AppDomain create time. internal static SharedStatics _sharedStatics; // when we create the single object we can construct anything we will need // here. If not too many, then just create them all in the constructor, otherwise // can have the property check & create. Need to be aware of threading issues // when do so though. // Note: This ctor is not called when we setup _sharedStatics via AppDomain::SetupSharedStatics SharedStatics() { _Remoting_Identity_IDGuid = null; _Remoting_Identity_IDSeqNum = 0x40; // Reserve initial numbers for well known objects. #if FEATURE_CAS_POLICY _maker = null; #endif // FEATURE_CAS_POLICY } private String _Remoting_Identity_IDGuid; public static String Remoting_Identity_IDGuid { [System.Security.SecuritySafeCritical] // auto-generated get { if (_sharedStatics._Remoting_Identity_IDGuid == null) { bool tookLock = false; RuntimeHelpers.PrepareConstrainedRegions(); try { Monitor.Enter(_sharedStatics, ref tookLock); if (_sharedStatics._Remoting_Identity_IDGuid == null) { _sharedStatics._Remoting_Identity_IDGuid = Guid.NewGuid().ToString().Replace('-', '_'); } } finally { if (tookLock) Monitor.Exit(_sharedStatics); } } Contract.Assert(_sharedStatics._Remoting_Identity_IDGuid != null, "_sharedStatics._Remoting_Identity_IDGuid != null"); return _sharedStatics._Remoting_Identity_IDGuid; } } #if FEATURE_CAS_POLICY private StringMaker _maker; [System.Security.SecuritySafeCritical] // auto-generated static public StringMaker GetSharedStringMaker() { StringMaker maker = null; bool tookLock = false; RuntimeHelpers.PrepareConstrainedRegions(); try { Monitor.Enter(_sharedStatics, ref tookLock); if (_sharedStatics._maker != null) { maker = _sharedStatics._maker; _sharedStatics._maker = null; } } finally { if (tookLock) Monitor.Exit(_sharedStatics); } if (maker == null) { maker = new StringMaker(); } return maker; } [System.Security.SecuritySafeCritical] // auto-generated static public void ReleaseSharedStringMaker(ref StringMaker maker) { // save this stringmaker so someone else can use it bool tookLock = false; RuntimeHelpers.PrepareConstrainedRegions(); try { Monitor.Enter(_sharedStatics, ref tookLock); _sharedStatics._maker = maker; maker = null; } finally { if (tookLock) Monitor.Exit(_sharedStatics); } } #endif // FEATURE_CAS_POLICY // Note this may not need to be process-wide. private int _Remoting_Identity_IDSeqNum; internal static int Remoting_Identity_GetNextSeqNum() { return Interlocked.Increment(ref _sharedStatics._Remoting_Identity_IDSeqNum); } // This is the total amount of memory currently "reserved" via // all MemoryFailPoints allocated within the process. // Stored as a long because we need to use Interlocked.Add. private long _memFailPointReservedMemory; [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] internal static long AddMemoryFailPointReservation(long size) { // Size can legitimately be negative - see Dispose. return Interlocked.Add(ref _sharedStatics._memFailPointReservedMemory, (long) size); } internal static ulong MemoryFailPointReservedMemory { get { Contract.Assert(_sharedStatics._memFailPointReservedMemory >= 0, "Process-wide MemoryFailPoint reserved memory was negative!"); return (ulong) _sharedStatics._memFailPointReservedMemory; } } #if FEATURE_CORECLR // Silverlight2 implementation restriction (all hosts must specify the same PLATFORM_ASSEMBLIES list.) internal static bool ConflictsWithPriorPlatformList(String platformListString) { if (platformListString == null) { platformListString = ""; // null is valid but collides with _platformListString sentinel so convert to semantically equivalent "". } String prior = Interlocked.CompareExchange(ref _sharedStatics._platformListString, platformListString, null); if (prior == null) { return false; } if (prior == platformListString) { return false; } return true; } private String _platformListString; #endif //FEATURE_CORECLR } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================================== ** ** Class: SharedStatics ** ** ** Purpose: Container for statics that are shared across AppDomains. ** ** =============================================================================*/ namespace System { using System.Threading; using System.Runtime.Remoting; using System.Security; using System.Security.Util; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using System.Diagnostics.Contracts; #if FEATURE_CAS_POLICY using StringMaker = System.Security.Util.Tokenizer.StringMaker; #endif // FEATURE_CAS_POLICY internal sealed class SharedStatics { // this is declared static but is actually forced to be the same object // for each AppDomain at AppDomain create time. internal static SharedStatics _sharedStatics; // when we create the single object we can construct anything we will need // here. If not too many, then just create them all in the constructor, otherwise // can have the property check & create. Need to be aware of threading issues // when do so though. // Note: This ctor is not called when we setup _sharedStatics via AppDomain::SetupSharedStatics SharedStatics() { _Remoting_Identity_IDGuid = null; _Remoting_Identity_IDSeqNum = 0x40; // Reserve initial numbers for well known objects. #if FEATURE_CAS_POLICY _maker = null; #endif // FEATURE_CAS_POLICY } private String _Remoting_Identity_IDGuid; public static String Remoting_Identity_IDGuid { [System.Security.SecuritySafeCritical] // auto-generated get { if (_sharedStatics._Remoting_Identity_IDGuid == null) { bool tookLock = false; RuntimeHelpers.PrepareConstrainedRegions(); try { Monitor.Enter(_sharedStatics, ref tookLock); if (_sharedStatics._Remoting_Identity_IDGuid == null) { _sharedStatics._Remoting_Identity_IDGuid = Guid.NewGuid().ToString().Replace('-', '_'); } } finally { if (tookLock) Monitor.Exit(_sharedStatics); } } Contract.Assert(_sharedStatics._Remoting_Identity_IDGuid != null, "_sharedStatics._Remoting_Identity_IDGuid != null"); return _sharedStatics._Remoting_Identity_IDGuid; } } #if FEATURE_CAS_POLICY private StringMaker _maker; [System.Security.SecuritySafeCritical] // auto-generated static public StringMaker GetSharedStringMaker() { StringMaker maker = null; bool tookLock = false; RuntimeHelpers.PrepareConstrainedRegions(); try { Monitor.Enter(_sharedStatics, ref tookLock); if (_sharedStatics._maker != null) { maker = _sharedStatics._maker; _sharedStatics._maker = null; } } finally { if (tookLock) Monitor.Exit(_sharedStatics); } if (maker == null) { maker = new StringMaker(); } return maker; } [System.Security.SecuritySafeCritical] // auto-generated static public void ReleaseSharedStringMaker(ref StringMaker maker) { // save this stringmaker so someone else can use it bool tookLock = false; RuntimeHelpers.PrepareConstrainedRegions(); try { Monitor.Enter(_sharedStatics, ref tookLock); _sharedStatics._maker = maker; maker = null; } finally { if (tookLock) Monitor.Exit(_sharedStatics); } } #endif // FEATURE_CAS_POLICY // Note this may not need to be process-wide. private int _Remoting_Identity_IDSeqNum; internal static int Remoting_Identity_GetNextSeqNum() { return Interlocked.Increment(ref _sharedStatics._Remoting_Identity_IDSeqNum); } // This is the total amount of memory currently "reserved" via // all MemoryFailPoints allocated within the process. // Stored as a long because we need to use Interlocked.Add. private long _memFailPointReservedMemory; [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] internal static long AddMemoryFailPointReservation(long size) { // Size can legitimately be negative - see Dispose. return Interlocked.Add(ref _sharedStatics._memFailPointReservedMemory, (long) size); } internal static ulong MemoryFailPointReservedMemory { get { Contract.Assert(_sharedStatics._memFailPointReservedMemory >= 0, "Process-wide MemoryFailPoint reserved memory was negative!"); return (ulong) _sharedStatics._memFailPointReservedMemory; } } #if FEATURE_CORECLR // Silverlight2 implementation restriction (all hosts must specify the same PLATFORM_ASSEMBLIES list.) internal static bool ConflictsWithPriorPlatformList(String platformListString) { if (platformListString == null) { platformListString = ""; // null is valid but collides with _platformListString sentinel so convert to semantically equivalent "". } String prior = Interlocked.CompareExchange (ref _sharedStatics._platformListString, platformListString, null); if (prior == null) { return false; } if (prior == platformListString) { return false; } return true; } private String _platformListString; #endif //FEATURE_CORECLR } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ScriptingSectionGroup.cs
- XmlRawWriter.cs
- ScriptReferenceBase.cs
- Vector3DConverter.cs
- GeneralTransform.cs
- RemotingConfiguration.cs
- CommonDialog.cs
- GlyphTypeface.cs
- Assembly.cs
- MimeMultiPart.cs
- EncodedStreamFactory.cs
- ElementHostPropertyMap.cs
- HuffModule.cs
- TypeUsage.cs
- AvTrace.cs
- MsdtcClusterUtils.cs
- CachedCompositeFamily.cs
- ObjectDataSourceFilteringEventArgs.cs
- ReadOnlyDataSource.cs
- SignatureResourcePool.cs
- QEncodedStream.cs
- ParentUndoUnit.cs
- SchemaElementLookUpTable.cs
- ListBindableAttribute.cs
- ReceiveActivityDesigner.cs
- PartialCachingAttribute.cs
- DataGridViewColumnDesigner.cs
- Int64AnimationBase.cs
- Module.cs
- XNodeValidator.cs
- Sql8ExpressionRewriter.cs
- DataQuery.cs
- CompiledRegexRunnerFactory.cs
- coordinator.cs
- ALinqExpressionVisitor.cs
- Track.cs
- ViewStateException.cs
- InkCanvas.cs
- PolygonHotSpot.cs
- View.cs
- QuaternionAnimation.cs
- IteratorDescriptor.cs
- SizeIndependentAnimationStorage.cs
- AttributeQuery.cs
- GroupLabel.cs
- PropertyNames.cs
- SourceElementsCollection.cs
- FreezableCollection.cs
- ConditionalExpression.cs
- ConfigurationStrings.cs
- ListView.cs
- CodeParameterDeclarationExpression.cs
- RawUIStateInputReport.cs
- StreamingContext.cs
- ArraySegment.cs
- KeyEventArgs.cs
- TextBoxAutoCompleteSourceConverter.cs
- CompositionAdorner.cs
- ToolStripSystemRenderer.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- ErrorFormatterPage.cs
- ProxyAttribute.cs
- StagingAreaInputItem.cs
- DesignerContextDescriptor.cs
- UpdateCommandGenerator.cs
- SqlClientWrapperSmiStream.cs
- CngKey.cs
- VoiceObjectToken.cs
- JpegBitmapEncoder.cs
- MaskedTextProvider.cs
- TrackingLocationCollection.cs
- XmlSchemaAttributeGroupRef.cs
- SourceItem.cs
- WebPartVerb.cs
- RtType.cs
- IdentifierService.cs
- ConfigurationPropertyAttribute.cs
- CollectionAdapters.cs
- TextEffect.cs
- MultipartContentParser.cs
- ReverseInheritProperty.cs
- DataGridViewColumnCollectionDialog.cs
- FactoryGenerator.cs
- ReadWriteObjectLock.cs
- TabItemWrapperAutomationPeer.cs
- RequestQueue.cs
- ServiceMemoryGates.cs
- HttpRuntime.cs
- SqlInfoMessageEvent.cs
- Window.cs
- ApplicationException.cs
- DataGridPageChangedEventArgs.cs
- SoapCommonClasses.cs
- storepermission.cs
- CustomAttributeFormatException.cs
- RegexMatchCollection.cs
- LongValidatorAttribute.cs
- PtsContext.cs
- SecurityCredentialsManager.cs
- ExpressionNormalizer.cs