Code:
/ 4.0 / 4.0 / 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. //------------------------------------------------------------------------------ // 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
- ManagedWndProcTracker.cs
- DocumentSequence.cs
- SmtpReplyReaderFactory.cs
- NotCondition.cs
- ImpersonateTokenRef.cs
- ProxyWebPartConnectionCollection.cs
- TextBox.cs
- SystemEvents.cs
- IssuedTokenClientBehaviorsElement.cs
- DefaultEventAttribute.cs
- Win32KeyboardDevice.cs
- _SecureChannel.cs
- Encoder.cs
- MetadataItemEmitter.cs
- Utils.cs
- SinglePageViewer.cs
- xmlfixedPageInfo.cs
- ServiceDescriptionData.cs
- TypeUsageBuilder.cs
- WebPartEditorCancelVerb.cs
- SoapMessage.cs
- AccessDataSourceWizardForm.cs
- StyleBamlTreeBuilder.cs
- HoistedLocals.cs
- ComplusTypeValidator.cs
- SettingsProviderCollection.cs
- BindingNavigator.cs
- CookielessHelper.cs
- PropertyDescriptorCollection.cs
- HostingEnvironment.cs
- CodeAttributeDeclaration.cs
- RemoteWebConfigurationHost.cs
- SamlAuthorizationDecisionClaimResource.cs
- WizardSideBarListControlItemEventArgs.cs
- FtpRequestCacheValidator.cs
- WinFormsSecurity.cs
- BaseAutoFormat.cs
- InvalidOperationException.cs
- ThumbAutomationPeer.cs
- CryptographicAttribute.cs
- WindowsUpDown.cs
- FormClosedEvent.cs
- DesignTimeTemplateParser.cs
- StorageEntityContainerMapping.cs
- ClientData.cs
- BounceEase.cs
- StateMachineDesignerPaint.cs
- ToolboxItemFilterAttribute.cs
- DbDataRecord.cs
- MappingException.cs
- PipelineModuleStepContainer.cs
- XmlAnyElementAttribute.cs
- DrawingBrush.cs
- HostingEnvironmentException.cs
- MemberRelationshipService.cs
- ListControlDesigner.cs
- TreeNodeBindingCollection.cs
- IntSecurity.cs
- FontClient.cs
- ComPlusTypeLoader.cs
- NonceCache.cs
- ItemDragEvent.cs
- Repeater.cs
- ServiceDescriptionContext.cs
- BitmapData.cs
- ScrollPattern.cs
- _RequestCacheProtocol.cs
- ComEventsSink.cs
- SuppressIldasmAttribute.cs
- FontStretchConverter.cs
- XmlQueryOutput.cs
- CodeTryCatchFinallyStatement.cs
- Visual3D.cs
- ExecutionEngineException.cs
- SQLStringStorage.cs
- SqlGenericUtil.cs
- ECDsa.cs
- FormsAuthentication.cs
- ClientScriptManager.cs
- XamlPointCollectionSerializer.cs
- BoundingRectTracker.cs
- ResolvedKeyFrameEntry.cs
- DataGrid.cs
- ExpressionPrefixAttribute.cs
- DelegatingTypeDescriptionProvider.cs
- MethodBuilderInstantiation.cs
- ConfigurationSection.cs
- WebBrowser.cs
- SAPIEngineTypes.cs
- ImportException.cs
- NumberFormatInfo.cs
- HashJoinQueryOperatorEnumerator.cs
- LinkTarget.cs
- RawAppCommandInputReport.cs
- ComplexLine.cs
- TracedNativeMethods.cs
- ToolStripProgressBar.cs
- ToolStripSeparator.cs
- DecoderNLS.cs
- XmlDataLoader.cs