Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Log / System / IO / Log / LogFlushAsyncResult.cs / 1305376 / LogFlushAsyncResult.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.IO.Log { using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Security.Permissions; using System.Threading; using Microsoft.Win32.SafeHandles; sealed class LogFlushAsyncResult : OverlappedAsyncResult { LogRecordSequence recordSequence; ulong sequenceNumber; object boxedResultLsn; GCHandle pinnedResultLsn; internal LogFlushAsyncResult(LogRecordSequence recordSequence, AsyncCallback callback, object state) : base(callback, state) { this.recordSequence = recordSequence; } //=========================================================== // Parameters //=========================================================== internal ulong SequenceNumber { /* get { return this.sequenceNumber; } */ set { this.sequenceNumber = value; } } //============================================================ // Result //=========================================================== internal ulong ResultLsn { get { return (ulong)this.boxedResultLsn; } } internal void Start() { try { ulong resultLsn = 0; this.boxedResultLsn = (object)(resultLsn); this.pinnedResultLsn = GCHandle.Alloc(this.boxedResultLsn, GCHandleType.Pinned); Pack(this.boxedResultLsn); uint errorCode; unsafe { errorCode = UnsafeNativeMethods.FlushLogToLsnAsync( this.recordSequence.MarshalContext, ref this.sequenceNumber, this.pinnedResultLsn.AddrOfPinnedObject(), this.NativeOverlapped); } if (errorCode != Error.ERROR_IO_PENDING) { // We don't need to call Free() in a finally block, // because any exception will failfast the process Free(); this.pinnedResultLsn.Free(); if (errorCode == Error.ERROR_SUCCESS) { Complete(true, null); } else { Complete( true, UnsafeNativeMethods.FlushLogToLsnFilter(errorCode)); } } } #pragma warning suppress 56500 // We will be terminating the process with any exception in this call catch(Exception e) { // The code in the try block should not throw any exceptions. // If an exception is caught here, IO.Log may be in an unknown state. // We prefer to failfast instead of risking the possibility of log corruption. // Any client code using IO.Log must have a recovery model that can deal // with appdomain and process failures. DiagnosticUtility.InvokeFinalHandler(e); } } internal override void IOCompleted(uint errorCode) { this.pinnedResultLsn.Free(); if (errorCode == Error.ERROR_SUCCESS) { Complete(false, null); } else { Complete(false, UnsafeNativeMethods.FlushLogToLsnFilter(errorCode)); } } } } // 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.Generic; using System.Runtime.InteropServices; using System.Security.Permissions; using System.Threading; using Microsoft.Win32.SafeHandles; sealed class LogFlushAsyncResult : OverlappedAsyncResult { LogRecordSequence recordSequence; ulong sequenceNumber; object boxedResultLsn; GCHandle pinnedResultLsn; internal LogFlushAsyncResult(LogRecordSequence recordSequence, AsyncCallback callback, object state) : base(callback, state) { this.recordSequence = recordSequence; } //=========================================================== // Parameters //=========================================================== internal ulong SequenceNumber { /* get { return this.sequenceNumber; } */ set { this.sequenceNumber = value; } } //============================================================ // Result //=========================================================== internal ulong ResultLsn { get { return (ulong)this.boxedResultLsn; } } internal void Start() { try { ulong resultLsn = 0; this.boxedResultLsn = (object)(resultLsn); this.pinnedResultLsn = GCHandle.Alloc(this.boxedResultLsn, GCHandleType.Pinned); Pack(this.boxedResultLsn); uint errorCode; unsafe { errorCode = UnsafeNativeMethods.FlushLogToLsnAsync( this.recordSequence.MarshalContext, ref this.sequenceNumber, this.pinnedResultLsn.AddrOfPinnedObject(), this.NativeOverlapped); } if (errorCode != Error.ERROR_IO_PENDING) { // We don't need to call Free() in a finally block, // because any exception will failfast the process Free(); this.pinnedResultLsn.Free(); if (errorCode == Error.ERROR_SUCCESS) { Complete(true, null); } else { Complete( true, UnsafeNativeMethods.FlushLogToLsnFilter(errorCode)); } } } #pragma warning suppress 56500 // We will be terminating the process with any exception in this call catch(Exception e) { // The code in the try block should not throw any exceptions. // If an exception is caught here, IO.Log may be in an unknown state. // We prefer to failfast instead of risking the possibility of log corruption. // Any client code using IO.Log must have a recovery model that can deal // with appdomain and process failures. DiagnosticUtility.InvokeFinalHandler(e); } } internal override void IOCompleted(uint errorCode) { this.pinnedResultLsn.Free(); if (errorCode == Error.ERROR_SUCCESS) { Complete(false, null); } else { Complete(false, UnsafeNativeMethods.FlushLogToLsnFilter(errorCode)); } } } } // 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
- ExpressionBuilderContext.cs
- SecurityUniqueId.cs
- PropertyIDSet.cs
- Button.cs
- XmlSchemaCompilationSettings.cs
- EntityCommand.cs
- compensatingcollection.cs
- CompositeCollection.cs
- OleServicesContext.cs
- TargetParameterCountException.cs
- BoundPropertyEntry.cs
- Line.cs
- CodeIterationStatement.cs
- ListViewInsertedEventArgs.cs
- MemberHolder.cs
- WeakReferenceKey.cs
- StorageTypeMapping.cs
- OleDbFactory.cs
- ZoneButton.cs
- XmlStreamedByteStreamReader.cs
- FileUpload.cs
- NotifyInputEventArgs.cs
- Button.cs
- GenericEnumerator.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- PathFigureCollectionValueSerializer.cs
- OciEnlistContext.cs
- StreamResourceInfo.cs
- WorkflowViewStateService.cs
- TableColumnCollectionInternal.cs
- ColorTransform.cs
- ThreadExceptionDialog.cs
- DataGridViewColumn.cs
- SelectionItemPattern.cs
- Connection.cs
- DebugHandleTracker.cs
- AppDomainProtocolHandler.cs
- SqlDataSource.cs
- ObjectItemAssemblyLoader.cs
- PartialArray.cs
- XPathBinder.cs
- TabItem.cs
- SmtpNetworkElement.cs
- CreateRefExpr.cs
- DataServiceRequestOfT.cs
- ClientConfigPaths.cs
- Matrix.cs
- KeyPressEvent.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- CodeDelegateCreateExpression.cs
- BlurBitmapEffect.cs
- FontFamilyValueSerializer.cs
- WindowsEditBoxRange.cs
- NameTable.cs
- FlowNode.cs
- BamlLocalizableResource.cs
- ListBoxItemWrapperAutomationPeer.cs
- Int16AnimationUsingKeyFrames.cs
- WebBrowser.cs
- WebPartDisplayModeEventArgs.cs
- ContentTextAutomationPeer.cs
- PieceDirectory.cs
- HttpInputStream.cs
- EditorPart.cs
- FontCollection.cs
- InputLanguageManager.cs
- Int32RectValueSerializer.cs
- ProxyBuilder.cs
- CacheForPrimitiveTypes.cs
- CharacterMetrics.cs
- BlurEffect.cs
- DataGridViewRowHeaderCell.cs
- BuilderElements.cs
- ClientSideProviderDescription.cs
- Boolean.cs
- OptimizedTemplateContent.cs
- XmlSignificantWhitespace.cs
- BuildProviderInstallComponent.cs
- JsonByteArrayDataContract.cs
- HyperlinkAutomationPeer.cs
- HandledEventArgs.cs
- ProcessProtocolHandler.cs
- WorkflowEnvironment.cs
- columnmapkeybuilder.cs
- COSERVERINFO.cs
- Soap12ProtocolReflector.cs
- ConfigurationException.cs
- BreakRecordTable.cs
- DrawingImage.cs
- DbReferenceCollection.cs
- Pts.cs
- Permission.cs
- XmlSortKeyAccumulator.cs
- WebBrowserHelper.cs
- PEFileReader.cs
- OAVariantLib.cs
- CompilerCollection.cs
- _ChunkParse.cs
- ScriptReferenceBase.cs
- Processor.cs