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
- DayRenderEvent.cs
- CodeSnippetExpression.cs
- Size3DValueSerializer.cs
- RawStylusInput.cs
- DocumentApplication.cs
- unsafenativemethodsother.cs
- ActivityCodeGenerator.cs
- XmlSchemaComplexContent.cs
- DataGridViewButtonColumn.cs
- TextPattern.cs
- HideDisabledControlAdapter.cs
- WebScriptEnablingBehavior.cs
- BufferedStream.cs
- XPathSelectionIterator.cs
- Popup.cs
- HtmlFormAdapter.cs
- TreeViewItem.cs
- HttpCookie.cs
- PageSetupDialog.cs
- DesignerDataTableBase.cs
- CodeTypeReference.cs
- OdbcConnectionString.cs
- FileUtil.cs
- CompareValidator.cs
- Int32Rect.cs
- DataGridViewColumnStateChangedEventArgs.cs
- DataControlFieldCell.cs
- ProtocolViolationException.cs
- HtmlControl.cs
- BulletChrome.cs
- SqlRowUpdatedEvent.cs
- LocalizableResourceBuilder.cs
- AdPostCacheSubstitution.cs
- DataSourceHelper.cs
- XmlAnyElementAttributes.cs
- DataGridColumnCollection.cs
- ImageSourceTypeConverter.cs
- HistoryEventArgs.cs
- ClonableStack.cs
- HybridObjectCache.cs
- CodeNamespace.cs
- MethodRental.cs
- SafeRightsManagementSessionHandle.cs
- XDeferredAxisSource.cs
- EncoderFallback.cs
- UserNameSecurityTokenAuthenticator.cs
- Point3DCollection.cs
- FileDialogCustomPlace.cs
- DataSourceView.cs
- DashStyles.cs
- RsaSecurityKey.cs
- BaseTemplateCodeDomTreeGenerator.cs
- TextBox.cs
- EditorPartChrome.cs
- DataReaderContainer.cs
- AsyncSerializedWorker.cs
- PropertyMetadata.cs
- TextElementAutomationPeer.cs
- MaxSessionCountExceededException.cs
- PointHitTestParameters.cs
- PhysicalFontFamily.cs
- Assembly.cs
- IdentityReference.cs
- GridViewDeleteEventArgs.cs
- DragDeltaEventArgs.cs
- TraceData.cs
- CreateUserErrorEventArgs.cs
- PrintDialog.cs
- SqlParameter.cs
- QueryableDataSourceHelper.cs
- XPathParser.cs
- Serializer.cs
- FlowDocument.cs
- TextEditorSelection.cs
- NetPipeSection.cs
- DoubleAnimationUsingPath.cs
- RtType.cs
- ContextMarshalException.cs
- ExtenderHelpers.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- DomainUpDown.cs
- BitmapCodecInfoInternal.cs
- TextFindEngine.cs
- EncodingTable.cs
- TypeContext.cs
- StoreItemCollection.Loader.cs
- MiniParameterInfo.cs
- BridgeDataRecord.cs
- ClipboardData.cs
- TypeInitializationException.cs
- VBCodeProvider.cs
- ConfigurationPermission.cs
- QueryOptionExpression.cs
- ParallelEnumerable.cs
- EntitySetRetriever.cs
- DataBinding.cs
- PathSegment.cs
- DropShadowBitmapEffect.cs
- basecomparevalidator.cs
- ConstraintConverter.cs