Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Log / System / IO / Log / LogRestartAreaEnumerator.cs / 1305376 / LogRestartAreaEnumerator.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.IO.Log { using System; using System.Collections; using System.Collections.Generic; using System.Runtime.InteropServices; // See the notes on LogLogRecordEnumerator for why this is // thread-safe: the same arguments apply here. // class LogRestartAreaEnumerator : IEnumerator{ enum State { BeforeFirst, Valid, AfterLast, Disposed } LogRecordSequence recordSequence; State state; object syncRoot; SafeReadContext readContext; LogLogRecord current; internal LogRestartAreaEnumerator(LogRecordSequence recordSequence) { this.recordSequence = recordSequence; this.syncRoot = new object(); this.state = State.BeforeFirst; } object IEnumerator.Current { get { return this.Current; } } public LogRecord Current { get { lock(this.syncRoot) { if (this.state == State.Disposed) #pragma warning suppress 56503 throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ObjectDisposed()); // IEnumerable interface contract for "current" member can throw InvalidOperationException. Suppressing this warning. if (this.state == State.BeforeFirst) #pragma warning suppress 56503 throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.EnumNotStarted()); if (this.state == State.AfterLast) #pragma warning suppress 56503 throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.EnumEnded()); return this.current; } } } public void Dispose() { lock(this.syncRoot) { if (this.current != null) { this.current.Detach(); this.current = null; } if ((this.readContext != null) && (!this.readContext.IsInvalid)) { this.readContext.Close(); } this.state = State.Disposed; } } public bool MoveNext() { lock(this.syncRoot) { if (this.state == State.Disposed) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ObjectDisposed()); if (this.state == State.AfterLast) return false; if (this.readContext == null) { return ReadRestartArea(); } else { if (this.current != null) this.current.Detach(); return ReadPreviousRestartArea(); } } } bool ReadRestartArea() { if (!((this.readContext == null || this.readContext.IsInvalid) && (this.current == null))) { // An internal consistency check has failed. The indicates a bug in IO.Log's internal processing // Rather than proceeding with non-deterministic execution and risking the loss or corruption of // log records, we failfast the process. DiagnosticUtility.FailFast("Should only call this for first record!"); } unsafe { byte *readBuffer; int bufferLength; ulong lsnRecord; if (!UnsafeNativeMethods.ReadLogRestartAreaSync( this.recordSequence.MarshalContext, out readBuffer, out bufferLength, out lsnRecord, out this.readContext)) { this.state = State.AfterLast; return false; } this.current = new LogLogRecord( new SequenceNumber(lsnRecord), SequenceNumber.Invalid, SequenceNumber.Invalid, readBuffer, bufferLength); this.state = State.Valid; return true; } } bool ReadPreviousRestartArea() { if (this.readContext == null || this.readContext.IsInvalid) { // An internal consistency check has failed. The indicates a bug in IO.Log's internal processing // Rather than proceeding with non-deterministic execution and risking the loss or corruption of // log records, we failfast the process. DiagnosticUtility.FailFast("Should only be called for records after the first!"); } unsafe { byte *readBuffer; int bufferLength; ulong lsnRecord; if (!UnsafeNativeMethods.ReadPreviousLogRestartAreaSync( this.readContext, out readBuffer, out bufferLength, out lsnRecord)) { this.state = State.AfterLast; return false; } this.current = new LogLogRecord( new SequenceNumber(lsnRecord), SequenceNumber.Invalid, SequenceNumber.Invalid, readBuffer, bufferLength); this.state = State.Valid; return true; } } public void Reset() { lock (this.syncRoot) { if (this.state == State.Disposed) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ObjectDisposed()); if (this.current != null) { this.current.Detach(); this.current = null; } if ((this.readContext != null) && (!this.readContext.IsInvalid)) { this.readContext.Close(); this.readContext = null; } this.state = State.BeforeFirst; } } } } // 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
- ThreadExceptionEvent.cs
- FactoryId.cs
- TextEffect.cs
- LinqDataSourceUpdateEventArgs.cs
- Maps.cs
- odbcmetadatacollectionnames.cs
- ValueSerializerAttribute.cs
- PolicyException.cs
- QualificationDataItem.cs
- Options.cs
- Attributes.cs
- BooleanToVisibilityConverter.cs
- OutputCacheSection.cs
- GraphicsPathIterator.cs
- PatternMatcher.cs
- RepeaterCommandEventArgs.cs
- recordstatefactory.cs
- Crc32Helper.cs
- CompositeTypefaceMetrics.cs
- precedingsibling.cs
- SortDescription.cs
- XmlEncodedRawTextWriter.cs
- PathHelper.cs
- RepeaterItemEventArgs.cs
- AutoGeneratedField.cs
- Ray3DHitTestResult.cs
- RelatedView.cs
- ImageCodecInfoPrivate.cs
- PeerPresenceInfo.cs
- SQLMoney.cs
- NetworkInterface.cs
- TemplateKeyConverter.cs
- WindowsGraphicsWrapper.cs
- PreservationFileReader.cs
- ContentControl.cs
- DriveInfo.cs
- ToggleButton.cs
- ViewEventArgs.cs
- UIElement.cs
- ControlTemplate.cs
- GeometryConverter.cs
- NullableConverter.cs
- ChangePassword.cs
- IHttpResponseInternal.cs
- ContentElementCollection.cs
- RowCache.cs
- SqlUnionizer.cs
- _ListenerResponseStream.cs
- TimeBoundedCache.cs
- DataPagerFieldItem.cs
- Preprocessor.cs
- ContextMarshalException.cs
- XmlHierarchicalEnumerable.cs
- NominalTypeEliminator.cs
- UpDownBase.cs
- SQLSingle.cs
- TypeConverterHelper.cs
- IgnoreFileBuildProvider.cs
- TextureBrush.cs
- PathFigure.cs
- Stack.cs
- NGCSerializerAsync.cs
- Normalization.cs
- SoapEnumAttribute.cs
- RelatedCurrencyManager.cs
- TaskFormBase.cs
- RepeaterCommandEventArgs.cs
- WebInvokeAttribute.cs
- CompositeDispatchFormatter.cs
- SpecialNameAttribute.cs
- LambdaCompiler.Unary.cs
- ParameterBuilder.cs
- StylusPointDescription.cs
- DataReceivedEventArgs.cs
- MenuItem.cs
- DSASignatureDeformatter.cs
- DataGridDetailsPresenterAutomationPeer.cs
- StringUtil.cs
- MgmtConfigurationRecord.cs
- SectionUpdates.cs
- TaskbarItemInfo.cs
- _SecureChannel.cs
- Grid.cs
- WebPartUserCapability.cs
- FilterException.cs
- XPathNavigatorReader.cs
- SignalGate.cs
- DiscoveryClientChannelBase.cs
- PcmConverter.cs
- LinqDataView.cs
- Merger.cs
- WebPartManagerInternals.cs
- ComPlusTraceRecord.cs
- ExpressionBuilderCollection.cs
- FixedFlowMap.cs
- BuildProviderAppliesToAttribute.cs
- ReferenceEqualityComparer.cs
- EntityDataSourceUtil.cs
- TerminateWorkflow.cs
- DSACryptoServiceProvider.cs