Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / clr / src / BCL / System / Runtime / Remoting / LeaseManager.cs / 1 / LeaseManager.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //+---------------------------------------------------------------------------- // // Microsoft Windows // File: LeaseManager.cs // // Contents: Administers the leases in an appdomain // // History: 1/5/00[....] Created // //+--------------------------------------------------------------------------- namespace System.Runtime.Remoting.Lifetime { using System; using System.Collections; using System.Threading; internal class LeaseManager { // Lease Lists private Hashtable leaseToTimeTable = new Hashtable(); // Async Sponsor Calls //private SortedList sponsorCallList = new SortedList(); private Hashtable sponsorTable = new Hashtable(); // LeaseTimeAnalyzer thread private TimeSpan pollTime; AutoResetEvent waitHandle; TimerCallback leaseTimeAnalyzerDelegate; private volatile Timer leaseTimer; internal static bool IsInitialized() { DomainSpecificRemotingData remotingData = Thread.GetDomain().RemotingData; LeaseManager leaseManager = remotingData.LeaseManager; return leaseManager != null; } internal static LeaseManager GetLeaseManager(TimeSpan pollTime) { DomainSpecificRemotingData remotingData = Thread.GetDomain().RemotingData; LeaseManager leaseManager = remotingData.LeaseManager; if (leaseManager == null) { lock (remotingData) { if (remotingData.LeaseManager == null) { remotingData.LeaseManager = new LeaseManager(pollTime); } leaseManager = remotingData.LeaseManager; } } return leaseManager; } internal static LeaseManager GetLeaseManager() { DomainSpecificRemotingData remotingData = Thread.GetDomain().RemotingData; LeaseManager leaseManager = remotingData.LeaseManager; BCLDebug.Assert(leaseManager != null, "[LeaseManager.GetLeaseManager()]leaseManager !=null"); return leaseManager; } private LeaseManager(TimeSpan pollTime) { BCLDebug.Trace("REMOTE","LeaseManager Constructor"); this.pollTime = pollTime; leaseTimeAnalyzerDelegate = new TimerCallback(this.LeaseTimeAnalyzer); waitHandle = new AutoResetEvent(false); // We need to create a Timer with Infinite dueTime to ensure that // leaseTimeAnalyzerDelegate doesnt get invoked before leaseTimer is initialized // Once initialized we can change it to the appropriate dueTime leaseTimer = new Timer(leaseTimeAnalyzerDelegate, null, Timeout.Infinite, Timeout.Infinite); leaseTimer.Change((int)pollTime.TotalMilliseconds, Timeout.Infinite); } internal void ChangePollTime(TimeSpan pollTime) { BCLDebug.Trace("REMOTE","LeaseManager ChangePollTime ", pollTime); this.pollTime = pollTime; } internal void ActivateLease(Lease lease) { BCLDebug.Trace("REMOTE","LeaseManager AddLease ",lease.id," ",lease.managedObject); lock(leaseToTimeTable) { leaseToTimeTable[lease] = lease.leaseTime; } } internal void DeleteLease(Lease lease) { BCLDebug.Trace("REMOTE","LeaseManager DeleteLease ",lease.id); lock(leaseToTimeTable) { leaseToTimeTable.Remove(lease); } } [System.Diagnostics.Conditional("_LOGGING")] internal void DumpLeases(Lease[] leases) { for (int i=0; i[....] Created // //+--------------------------------------------------------------------------- namespace System.Runtime.Remoting.Lifetime { using System; using System.Collections; using System.Threading; internal class LeaseManager { // Lease Lists private Hashtable leaseToTimeTable = new Hashtable(); // Async Sponsor Calls //private SortedList sponsorCallList = new SortedList(); private Hashtable sponsorTable = new Hashtable(); // LeaseTimeAnalyzer thread private TimeSpan pollTime; AutoResetEvent waitHandle; TimerCallback leaseTimeAnalyzerDelegate; private volatile Timer leaseTimer; internal static bool IsInitialized() { DomainSpecificRemotingData remotingData = Thread.GetDomain().RemotingData; LeaseManager leaseManager = remotingData.LeaseManager; return leaseManager != null; } internal static LeaseManager GetLeaseManager(TimeSpan pollTime) { DomainSpecificRemotingData remotingData = Thread.GetDomain().RemotingData; LeaseManager leaseManager = remotingData.LeaseManager; if (leaseManager == null) { lock (remotingData) { if (remotingData.LeaseManager == null) { remotingData.LeaseManager = new LeaseManager(pollTime); } leaseManager = remotingData.LeaseManager; } } return leaseManager; } internal static LeaseManager GetLeaseManager() { DomainSpecificRemotingData remotingData = Thread.GetDomain().RemotingData; LeaseManager leaseManager = remotingData.LeaseManager; BCLDebug.Assert(leaseManager != null, "[LeaseManager.GetLeaseManager()]leaseManager !=null"); return leaseManager; } private LeaseManager(TimeSpan pollTime) { BCLDebug.Trace("REMOTE","LeaseManager Constructor"); this.pollTime = pollTime; leaseTimeAnalyzerDelegate = new TimerCallback(this.LeaseTimeAnalyzer); waitHandle = new AutoResetEvent(false); // We need to create a Timer with Infinite dueTime to ensure that // leaseTimeAnalyzerDelegate doesnt get invoked before leaseTimer is initialized // Once initialized we can change it to the appropriate dueTime leaseTimer = new Timer(leaseTimeAnalyzerDelegate, null, Timeout.Infinite, Timeout.Infinite); leaseTimer.Change((int)pollTime.TotalMilliseconds, Timeout.Infinite); } internal void ChangePollTime(TimeSpan pollTime) { BCLDebug.Trace("REMOTE","LeaseManager ChangePollTime ", pollTime); this.pollTime = pollTime; } internal void ActivateLease(Lease lease) { BCLDebug.Trace("REMOTE","LeaseManager AddLease ",lease.id," ",lease.managedObject); lock(leaseToTimeTable) { leaseToTimeTable[lease] = lease.leaseTime; } } internal void DeleteLease(Lease lease) { BCLDebug.Trace("REMOTE","LeaseManager DeleteLease ",lease.id); lock(leaseToTimeTable) { leaseToTimeTable.Remove(lease); } } [System.Diagnostics.Conditional("_LOGGING")] internal void DumpLeases(Lease[] leases) { for (int i=0; i
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- _NTAuthentication.cs
- SQLBoolean.cs
- DataGridViewDataErrorEventArgs.cs
- AncillaryOps.cs
- ProgressBar.cs
- Attributes.cs
- XPathSingletonIterator.cs
- DataReaderContainer.cs
- DomNameTable.cs
- WebControlsSection.cs
- PersonalizationStateInfoCollection.cs
- IteratorFilter.cs
- Quad.cs
- XomlCompilerParameters.cs
- ClassicBorderDecorator.cs
- InstanceNormalEvent.cs
- ConfigurationStrings.cs
- RichTextBoxConstants.cs
- UTF32Encoding.cs
- XPathNode.cs
- Pkcs9Attribute.cs
- SafeEventHandle.cs
- FrameworkPropertyMetadata.cs
- QfeChecker.cs
- SmiEventStream.cs
- ContainerUIElement3D.cs
- DataGridViewControlCollection.cs
- WeakReferenceEnumerator.cs
- ProtectedConfigurationProviderCollection.cs
- mongolianshape.cs
- RootBuilder.cs
- OpacityConverter.cs
- TdsParserStateObject.cs
- WindowsTooltip.cs
- MessageBox.cs
- DataListItemEventArgs.cs
- ADConnectionHelper.cs
- DataObject.cs
- WindowsScroll.cs
- Errors.cs
- GridViewRowPresenter.cs
- LoginCancelEventArgs.cs
- InvariantComparer.cs
- ImageCodecInfo.cs
- XomlCompilerHelpers.cs
- DataViewSetting.cs
- EdmEntityTypeAttribute.cs
- XsdBuildProvider.cs
- MarkupCompilePass1.cs
- TraceXPathNavigator.cs
- _StreamFramer.cs
- ExpressionBuilderContext.cs
- Group.cs
- CompositionCommandSet.cs
- URL.cs
- MarkedHighlightComponent.cs
- PriorityChain.cs
- ImageConverter.cs
- FilteredAttributeCollection.cs
- MatrixValueSerializer.cs
- EntityProxyFactory.cs
- SqlWriter.cs
- SurrogateChar.cs
- TypeDescriptor.cs
- FormViewDeleteEventArgs.cs
- TextBox.cs
- GeometryGroup.cs
- WebPermission.cs
- CheckBoxPopupAdapter.cs
- RTTypeWrapper.cs
- SequentialWorkflowHeaderFooter.cs
- FrameworkObject.cs
- AdjustableArrowCap.cs
- ListDesigner.cs
- UIElement.cs
- XPathNodeIterator.cs
- BuildProviderCollection.cs
- SchemaCollectionPreprocessor.cs
- XmlQueryContext.cs
- ProviderConnectionPoint.cs
- StorageMappingItemCollection.cs
- StateMachine.cs
- HideDisabledControlAdapter.cs
- XmlQueryRuntime.cs
- Matrix3DValueSerializer.cs
- SortKey.cs
- GatewayDefinition.cs
- MatrixIndependentAnimationStorage.cs
- CacheDict.cs
- MemoryMappedViewAccessor.cs
- WindowsGrip.cs
- DefaultEvaluationContext.cs
- AccessDataSourceDesigner.cs
- BamlLocalizer.cs
- LayoutDump.cs
- ModelItemDictionaryImpl.cs
- BufferModeSettings.cs
- MappingModelBuildProvider.cs
- StrokeNodeData.cs
- StreamAsIStream.cs