Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / SharedStatics.cs / 1 / 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 StringMaker = System.Security.Util.Tokenizer.StringMaker; 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. _maker = null; } private String _Remoting_Identity_IDGuid; public static String Remoting_Identity_IDGuid { get { if (_sharedStatics._Remoting_Identity_IDGuid == null) { bool tookLock = false; RuntimeHelpers.PrepareConstrainedRegions(); try { Monitor.ReliableEnter(_sharedStatics, ref tookLock); if (_sharedStatics._Remoting_Identity_IDGuid == null) { _sharedStatics._Remoting_Identity_IDGuid = Guid.NewGuid().ToString().Replace('-', '_'); } } finally { if (tookLock) Monitor.Exit(_sharedStatics); } } BCLDebug.Assert(_sharedStatics._Remoting_Identity_IDGuid != null, "_sharedStatics._Remoting_Identity_IDGuid != null"); return _sharedStatics._Remoting_Identity_IDGuid; } } private StringMaker _maker; static public StringMaker GetSharedStringMaker() { StringMaker maker = null; bool tookLock = false; RuntimeHelpers.PrepareConstrainedRegions(); try { Monitor.ReliableEnter(_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; } static public void ReleaseSharedStringMaker(ref StringMaker maker) { // save this stringmaker so someone else can use it bool tookLock = false; RuntimeHelpers.PrepareConstrainedRegions(); try { Monitor.ReliableEnter(_sharedStatics, ref tookLock); _sharedStatics._maker = maker; maker = null; } finally { if (tookLock) Monitor.Exit(_sharedStatics); } } // 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 { BCLDebug.Assert(_sharedStatics._memFailPointReservedMemory >= 0, "Process-wide MemoryFailPoint reserved memory was negative!"); return (ulong) _sharedStatics._memFailPointReservedMemory; } } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PackageRelationship.cs
- CssClassPropertyAttribute.cs
- SetIterators.cs
- OracleInfoMessageEventArgs.cs
- CodeChecksumPragma.cs
- TreeIterators.cs
- UserInitiatedNavigationPermission.cs
- ControlBuilderAttribute.cs
- sqlinternaltransaction.cs
- JsonFormatReaderGenerator.cs
- OrderedHashRepartitionStream.cs
- columnmapkeybuilder.cs
- TextBox.cs
- BuilderInfo.cs
- InterleavedZipPartStream.cs
- ThreadStateException.cs
- BehaviorDragDropEventArgs.cs
- IconHelper.cs
- Regex.cs
- ResourceManagerWrapper.cs
- GridViewEditEventArgs.cs
- LinkDesigner.cs
- BindingEditor.xaml.cs
- unsafenativemethodsother.cs
- Manipulation.cs
- DefaultEventAttribute.cs
- CommandID.cs
- TextEditorThreadLocalStore.cs
- StringValueSerializer.cs
- DbException.cs
- XPathNodePointer.cs
- MarshalByValueComponent.cs
- BaseValidator.cs
- Connector.cs
- IFlowDocumentViewer.cs
- LogicalCallContext.cs
- FloaterBaseParaClient.cs
- NavigationWindowAutomationPeer.cs
- DbDataRecord.cs
- MultiSelector.cs
- PasswordTextContainer.cs
- ColorConvertedBitmap.cs
- InheritanceAttribute.cs
- XmlAnyElementAttribute.cs
- SendMailErrorEventArgs.cs
- GenericWebPart.cs
- RegexTree.cs
- ContentTextAutomationPeer.cs
- XslTransformFileEditor.cs
- ColumnReorderedEventArgs.cs
- EmissiveMaterial.cs
- InternalConfigSettingsFactory.cs
- HTMLTagNameToTypeMapper.cs
- ChannelTraceRecord.cs
- LogicalExpressionEditor.cs
- AxWrapperGen.cs
- GenerateTemporaryTargetAssembly.cs
- XmlCharCheckingWriter.cs
- EntryPointNotFoundException.cs
- DoubleAnimationBase.cs
- StatusBar.cs
- ApplicationGesture.cs
- XmlSchemaChoice.cs
- XmlHelper.cs
- Transform3D.cs
- ContextMenu.cs
- Stylesheet.cs
- CodeArgumentReferenceExpression.cs
- PolicyStatement.cs
- GeometryValueSerializer.cs
- PackageRelationshipSelector.cs
- PanningMessageFilter.cs
- EncoderExceptionFallback.cs
- ChtmlTextBoxAdapter.cs
- PathBox.cs
- Internal.cs
- BookmarkUndoUnit.cs
- CellParagraph.cs
- AssertSection.cs
- TextShapeableCharacters.cs
- QilNode.cs
- EntityCollectionChangedParams.cs
- OleDbConnectionInternal.cs
- BamlReader.cs
- ServiceHostingEnvironment.cs
- CreateSequenceResponse.cs
- Debug.cs
- DataViewListener.cs
- UriTemplateCompoundPathSegment.cs
- ToolStripButton.cs
- TypeUnloadedException.cs
- BrowserCapabilitiesFactoryBase.cs
- MaskedTextProvider.cs
- XmlSchemaChoice.cs
- AuthenticatingEventArgs.cs
- InternalEnumValidatorAttribute.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- ColorConverter.cs
- DataKeyArray.cs
- ControlEvent.cs