Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- InputLanguageCollection.cs
- GeometryCollection.cs
- EntityDataSourceDesignerHelper.cs
- TreeNodeCollection.cs
- PathSegmentCollection.cs
- ReadOnlyHierarchicalDataSource.cs
- SoapEnumAttribute.cs
- Visual3D.cs
- HttpResponseInternalWrapper.cs
- DetailsViewDeleteEventArgs.cs
- ObjectDataSourceSelectingEventArgs.cs
- FormViewRow.cs
- ArrayList.cs
- RowToFieldTransformer.cs
- BufferModesCollection.cs
- SaveFileDialog.cs
- PageStatePersister.cs
- PersonalizationProviderCollection.cs
- CodeSubDirectoriesCollection.cs
- ParagraphResult.cs
- Visual3D.cs
- EventSinkHelperWriter.cs
- DataServiceContext.cs
- BindToObject.cs
- SQLBinary.cs
- CompatibleComparer.cs
- DataRowView.cs
- WorkflowRuntimeService.cs
- DataGridColumnStyleMappingNameEditor.cs
- CaseInsensitiveComparer.cs
- ScriptReferenceBase.cs
- WhiteSpaceTrimStringConverter.cs
- XPathSelfQuery.cs
- DES.cs
- WebServiceResponse.cs
- DecoderBestFitFallback.cs
- InvalidProgramException.cs
- SettingsProperty.cs
- OptimalTextSource.cs
- KeyGesture.cs
- DataSourceView.cs
- BinaryFormatter.cs
- ChunkedMemoryStream.cs
- WebEventCodes.cs
- BindToObject.cs
- NameSpaceEvent.cs
- PageAction.cs
- CheckPair.cs
- ControlDesignerState.cs
- CustomAttributeBuilder.cs
- DataServiceHost.cs
- Membership.cs
- SchemaObjectWriter.cs
- ProxyHwnd.cs
- DataGridViewUtilities.cs
- SupportingTokenBindingElement.cs
- Trace.cs
- DataSourceProvider.cs
- DesignerTransactionCloseEvent.cs
- RemotingServices.cs
- TreeNodeStyleCollection.cs
- RoutedPropertyChangedEventArgs.cs
- XamlToRtfParser.cs
- BinHexDecoder.cs
- Util.cs
- LambdaCompiler.Expressions.cs
- XmlCDATASection.cs
- COM2PropertyDescriptor.cs
- OdbcConnectionStringbuilder.cs
- UpDownBase.cs
- Literal.cs
- SortQuery.cs
- PropertyGeneratedEventArgs.cs
- DoubleMinMaxAggregationOperator.cs
- WorkflowValidationFailedException.cs
- StorageModelBuildProvider.cs
- PersonalizationStateInfoCollection.cs
- EntityDataSourceEntityTypeFilterConverter.cs
- CodeSnippetTypeMember.cs
- UnsafeNativeMethods.cs
- HeaderedContentControl.cs
- IntPtr.cs
- MaterializeFromAtom.cs
- SystemIcons.cs
- MethodCallConverter.cs
- AutomationEvent.cs
- TagNameToTypeMapper.cs
- InlineCollection.cs
- WebPartMenuStyle.cs
- RequestContext.cs
- DbParameterHelper.cs
- HostedHttpRequestAsyncResult.cs
- Point3DCollectionValueSerializer.cs
- NestPullup.cs
- VisualCollection.cs
- AsyncResult.cs
- HandledEventArgs.cs
- StreamReader.cs
- ResXResourceWriter.cs
- Peer.cs