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
- DataTableClearEvent.cs
- DoubleCollectionValueSerializer.cs
- PtsHost.cs
- DataGridTableStyleMappingNameEditor.cs
- WebServiceParameterData.cs
- AdornerDecorator.cs
- SystemFonts.cs
- EndpointBehaviorElementCollection.cs
- Vector3D.cs
- AccessorTable.cs
- SchemaNames.cs
- ClientTargetCollection.cs
- ErrorFormatter.cs
- TreeView.cs
- DataSvcMapFile.cs
- StateWorkerRequest.cs
- SmiMetaDataProperty.cs
- PermissionToken.cs
- LeafCellTreeNode.cs
- DataGridParentRows.cs
- ToolStripItem.cs
- GridPattern.cs
- NGCPageContentCollectionSerializerAsync.cs
- ClientUtils.cs
- SelectedDatesCollection.cs
- MessageHeaderDescriptionCollection.cs
- Msec.cs
- AccessDataSourceView.cs
- MemberMaps.cs
- XmlSortKey.cs
- TemplatePropertyEntry.cs
- ChtmlImageAdapter.cs
- InsufficientExecutionStackException.cs
- CurrentChangingEventArgs.cs
- WsdlParser.cs
- IndexerNameAttribute.cs
- ColorMap.cs
- HttpHandlerActionCollection.cs
- TempFiles.cs
- ListSourceHelper.cs
- ProgressiveCrcCalculatingStream.cs
- WindowsStatusBar.cs
- ClientSection.cs
- SyndicationCategory.cs
- SQLStringStorage.cs
- TabPage.cs
- FrameworkEventSource.cs
- Base64Encoder.cs
- TextTrailingWordEllipsis.cs
- GenericEnumConverter.cs
- WorkflowRuntime.cs
- DynamicRendererThreadManager.cs
- BCLDebug.cs
- Convert.cs
- PreviewKeyDownEventArgs.cs
- DummyDataSource.cs
- XPathNode.cs
- WebPartsSection.cs
- FeatureSupport.cs
- MyContact.cs
- OrderPreservingPipeliningMergeHelper.cs
- MailBnfHelper.cs
- UpdateProgress.cs
- SelectionItemPattern.cs
- _ShellExpression.cs
- ClientCredentialsSecurityTokenManager.cs
- Decimal.cs
- ToolStripContentPanelRenderEventArgs.cs
- ClosureBinding.cs
- TextServicesLoader.cs
- SHA384Cng.cs
- TemplateNameScope.cs
- FilteredAttributeCollection.cs
- RadialGradientBrush.cs
- BaseAutoFormat.cs
- AccessDataSource.cs
- TextDecorationCollection.cs
- Window.cs
- ObjectAssociationEndMapping.cs
- ModifierKeysValueSerializer.cs
- ParameterCollectionEditorForm.cs
- TextWriterTraceListener.cs
- GradientStopCollection.cs
- TraceProvider.cs
- Native.cs
- HttpCookieCollection.cs
- StyleCollection.cs
- SyndicationElementExtensionCollection.cs
- Graphics.cs
- MemberMaps.cs
- CollectionEditorDialog.cs
- HttpCookiesSection.cs
- XmlSchemaCompilationSettings.cs
- XmlSchemaException.cs
- TextTabProperties.cs
- RowsCopiedEventArgs.cs
- LayoutEditorPart.cs
- SqlBulkCopyColumnMapping.cs
- SafeBitVector32.cs
- securitycriticaldataformultiplegetandset.cs