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
- StringDictionary.cs
- OutOfMemoryException.cs
- ThreadPool.cs
- EntityCollection.cs
- CodeAttributeDeclaration.cs
- SmtpException.cs
- DropShadowBitmapEffect.cs
- CompensatableSequenceActivity.cs
- _ChunkParse.cs
- COM2ExtendedTypeConverter.cs
- altserialization.cs
- Speller.cs
- AssemblyContextControlItem.cs
- SoapWriter.cs
- BinaryReader.cs
- DashStyle.cs
- Decimal.cs
- StaticFileHandler.cs
- OLEDB_Util.cs
- GridViewCancelEditEventArgs.cs
- StreamInfo.cs
- SemanticAnalyzer.cs
- WsatAdminException.cs
- AutoGeneratedFieldProperties.cs
- ClientScriptManagerWrapper.cs
- ClientSettingsStore.cs
- UriTemplateEquivalenceComparer.cs
- CqlParser.cs
- XsltException.cs
- ClientConvert.cs
- InstallerTypeAttribute.cs
- XmlMembersMapping.cs
- TaskbarItemInfo.cs
- XmlUtil.cs
- FeatureSupport.cs
- FragmentQuery.cs
- DataObjectSettingDataEventArgs.cs
- StrokeCollection.cs
- QueryAccessibilityHelpEvent.cs
- SqlNode.cs
- HttpMethodAttribute.cs
- ContextMenuAutomationPeer.cs
- VBIdentifierTrimConverter.cs
- TracingConnectionListener.cs
- MarshalDirectiveException.cs
- ContentFilePart.cs
- ItemType.cs
- StringArrayConverter.cs
- ScrollableControlDesigner.cs
- RubberbandSelector.cs
- UnsafeNativeMethods.cs
- XmlSchemas.cs
- TextFormatterImp.cs
- Renderer.cs
- IncrementalHitTester.cs
- StaticResourceExtension.cs
- DateTimePicker.cs
- MachineKeySection.cs
- TextAnchor.cs
- DynamicDocumentPaginator.cs
- RequestCachePolicy.cs
- ServiceModelConfigurationSectionCollection.cs
- XmlWrappingWriter.cs
- ToolStripItem.cs
- ToolStripDropDownItem.cs
- DllHostedComPlusServiceHost.cs
- AnnotationComponentChooser.cs
- SQLBinary.cs
- RelatedImageListAttribute.cs
- IFormattable.cs
- DrawTreeNodeEventArgs.cs
- EntityDataSourceColumn.cs
- MemberInfoSerializationHolder.cs
- ScriptRef.cs
- DotExpr.cs
- CancelEventArgs.cs
- ChtmlSelectionListAdapter.cs
- TransactionFlowOption.cs
- Utilities.cs
- infer.cs
- EventLogEntry.cs
- FileDataSource.cs
- TableStyle.cs
- StreamGeometryContext.cs
- TickBar.cs
- PresentationTraceSources.cs
- EmptyEnumerator.cs
- InputScopeConverter.cs
- WindowsGraphics2.cs
- SmiMetaDataProperty.cs
- TimeSpanValidatorAttribute.cs
- MessageDescriptionCollection.cs
- ReadOnlyTernaryTree.cs
- XmlComment.cs
- InputBinding.cs
- SqlDataAdapter.cs
- Debug.cs
- DataTableNameHandler.cs
- ViewEventArgs.cs
- TextTreeNode.cs