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
- SignatureHelper.cs
- oledbmetadatacollectionnames.cs
- PropertyItemInternal.cs
- X509Utils.cs
- TrueReadOnlyCollection.cs
- DataControlFieldHeaderCell.cs
- RegionData.cs
- CfgParser.cs
- MetafileHeaderWmf.cs
- PaintValueEventArgs.cs
- JumpPath.cs
- DesignerDeviceConfig.cs
- XmlSchemaAttributeGroupRef.cs
- TextCollapsingProperties.cs
- ObjectItemCollection.cs
- CodeDirectiveCollection.cs
- Stack.cs
- XmlException.cs
- ObjectCacheHost.cs
- ToolStripDropDownClosingEventArgs.cs
- mongolianshape.cs
- XmlSchema.cs
- PropertyNames.cs
- SQLDateTime.cs
- ApplicationFileCodeDomTreeGenerator.cs
- UDPClient.cs
- AdornedElementPlaceholder.cs
- DataGridClipboardHelper.cs
- CompressStream.cs
- InvariantComparer.cs
- XmlDataFileEditor.cs
- UrlMapping.cs
- CursorConverter.cs
- HttpCachePolicy.cs
- Emitter.cs
- VisualBasicSettingsHandler.cs
- RenderDataDrawingContext.cs
- CacheSection.cs
- IntSecurity.cs
- ToolboxItem.cs
- GridItemPattern.cs
- ConcurrentBag.cs
- SettingsPropertyWrongTypeException.cs
- StorageMappingItemLoader.cs
- Pen.cs
- MultilineStringConverter.cs
- TextRunTypographyProperties.cs
- HierarchicalDataTemplate.cs
- TextPointer.cs
- CellCreator.cs
- designeractionbehavior.cs
- StorageTypeMapping.cs
- FieldAccessException.cs
- Single.cs
- LOSFormatter.cs
- BitmapMetadataEnumerator.cs
- QuadraticBezierSegment.cs
- FontFamilyConverter.cs
- TypeToken.cs
- SqlMultiplexer.cs
- RoleManagerModule.cs
- PowerModeChangedEventArgs.cs
- TypefaceCollection.cs
- Camera.cs
- WebPartVerbCollection.cs
- IdentifierCreationService.cs
- PermissionSet.cs
- SmiTypedGetterSetter.cs
- TimeSpanValidator.cs
- PointHitTestResult.cs
- ProcessModuleCollection.cs
- OdbcException.cs
- DataRelationPropertyDescriptor.cs
- PlatformCulture.cs
- HttpListenerElement.cs
- TextCompositionEventArgs.cs
- TypeDependencyAttribute.cs
- shaper.cs
- ServiceInfoCollection.cs
- WsatStrings.cs
- ListViewItemMouseHoverEvent.cs
- Image.cs
- PageHandlerFactory.cs
- PipeException.cs
- ManipulationPivot.cs
- GeneralTransform.cs
- BindUriHelper.cs
- SRef.cs
- NameTable.cs
- Header.cs
- IResourceProvider.cs
- ObjectStateFormatter.cs
- ThicknessAnimationBase.cs
- ExpanderAutomationPeer.cs
- ChooseAction.cs
- OutputScope.cs
- baseaxisquery.cs
- HtmlInputCheckBox.cs
- RegionInfo.cs
- FocusWithinProperty.cs