Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / Log / System / IO / Log / LogRestartAreaEnumerator.cs / 1 / 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. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AutoScrollHelper.cs
- HttpBrowserCapabilitiesWrapper.cs
- ObjectAnimationUsingKeyFrames.cs
- CommandDesigner.cs
- Wizard.cs
- CodeMethodInvokeExpression.cs
- Collection.cs
- MachineSettingsSection.cs
- Listen.cs
- DataSourceIDConverter.cs
- CompensationHandlingFilter.cs
- RequestCacheEntry.cs
- DataGridViewCellStyleConverter.cs
- AuthenticationSection.cs
- NativeMethods.cs
- returneventsaver.cs
- ButtonBase.cs
- WorkflowOperationContext.cs
- SafeEventLogReadHandle.cs
- LocatorManager.cs
- SourceItem.cs
- EventDescriptorCollection.cs
- DBCommand.cs
- SystemParameters.cs
- UseLicense.cs
- Matrix.cs
- WebRequestModulesSection.cs
- _HeaderInfoTable.cs
- SecureStringHasher.cs
- EmptyEnumerable.cs
- EntityChangedParams.cs
- xmlglyphRunInfo.cs
- WindowsFormsEditorServiceHelper.cs
- WorkflowControlEndpoint.cs
- ChannelOptions.cs
- ContextDataSourceContextData.cs
- StylusButtonCollection.cs
- CultureInfoConverter.cs
- SizeAnimation.cs
- UTF8Encoding.cs
- DynamicResourceExtension.cs
- BinaryMethodMessage.cs
- TextEditorTyping.cs
- Enum.cs
- TextServicesCompartment.cs
- DataGridPagingPage.cs
- DecimalConstantAttribute.cs
- ItemCheckEvent.cs
- DbResourceAllocator.cs
- Message.cs
- XmlBinaryReaderSession.cs
- BitmapVisualManager.cs
- DbCommandTree.cs
- MobilePage.cs
- ColumnCollection.cs
- ProxyFragment.cs
- FrameworkContentElement.cs
- BufferBuilder.cs
- DiscoveryClientDuplexChannel.cs
- HostedNamedPipeTransportManager.cs
- MobileControlsSectionHelper.cs
- SemanticResolver.cs
- odbcmetadatacollectionnames.cs
- SessionStateModule.cs
- RMEnrollmentPage3.cs
- NativeMethods.cs
- UserCancellationException.cs
- SvcMapFileLoader.cs
- EventLogPermissionAttribute.cs
- NativeMethods.cs
- XNodeValidator.cs
- FigureHelper.cs
- SystemParameters.cs
- UITypeEditor.cs
- Rotation3D.cs
- SharedPerformanceCounter.cs
- PeerResolverMode.cs
- AspNetHostingPermission.cs
- KoreanCalendar.cs
- TranslateTransform.cs
- AdobeCFFWrapper.cs
- NativeStructs.cs
- SchemaImporterExtension.cs
- CallbackHandler.cs
- Event.cs
- TextContainerChangedEventArgs.cs
- AppDomainFactory.cs
- ProgressBar.cs
- ObfuscationAttribute.cs
- ClientSideQueueItem.cs
- GetWinFXPath.cs
- TextSegment.cs
- X509SubjectKeyIdentifierClause.cs
- DataGridViewSelectedColumnCollection.cs
- Guid.cs
- ZipIORawDataFileBlock.cs
- XmlnsDictionary.cs
- DictionaryEntry.cs
- DragEvent.cs
- AnnotationDocumentPaginator.cs