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
- UnionQueryOperator.cs
- QueryHandler.cs
- GroupedContextMenuStrip.cs
- BuildProviderUtils.cs
- ParseElementCollection.cs
- ParamArrayAttribute.cs
- StructuredType.cs
- TableProviderWrapper.cs
- NavigatorOutput.cs
- SQLByte.cs
- PrePrepareMethodAttribute.cs
- QueryOutputWriter.cs
- SqlFormatter.cs
- RowVisual.cs
- ModuleBuilder.cs
- DetailsViewPagerRow.cs
- StatusBar.cs
- ListenerConstants.cs
- BoolLiteral.cs
- MouseCaptureWithinProperty.cs
- OperationContractAttribute.cs
- CrossContextChannel.cs
- Version.cs
- IntegrationExceptionEventArgs.cs
- UnmanagedBitmapWrapper.cs
- SecurityPolicySection.cs
- HttpCookiesSection.cs
- IdentityReference.cs
- HashStream.cs
- WebPartTracker.cs
- CheckBoxField.cs
- CommonXSendMessage.cs
- ExpressionBuilderCollection.cs
- PageRequestManager.cs
- DataGridBoolColumn.cs
- FixedTextBuilder.cs
- BinaryNode.cs
- StreamWithDictionary.cs
- PropertiesTab.cs
- BookmarkEventArgs.cs
- GridViewUpdateEventArgs.cs
- RelationshipDetailsRow.cs
- SecureStringHasher.cs
- DynamicResourceExtensionConverter.cs
- OleDbConnection.cs
- versioninfo.cs
- HttpBrowserCapabilitiesWrapper.cs
- InputReportEventArgs.cs
- BatchWriter.cs
- SafeNativeMethodsCLR.cs
- ColumnWidthChangedEvent.cs
- DataControlImageButton.cs
- lengthconverter.cs
- ViewValidator.cs
- SocketException.cs
- GridViewRowCollection.cs
- CollectionChangedEventManager.cs
- GroupBox.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- TCPListener.cs
- CoreSwitches.cs
- DriveNotFoundException.cs
- PackUriHelper.cs
- ProfileService.cs
- ManualResetEvent.cs
- ArrayTypeMismatchException.cs
- CompilerTypeWithParams.cs
- DeadCharTextComposition.cs
- ReferenceConverter.cs
- TabPanel.cs
- TextDecoration.cs
- SafeProcessHandle.cs
- ComplexTypeEmitter.cs
- SimpleBitVector32.cs
- NumberFormatInfo.cs
- ContextDataSourceContextData.cs
- OraclePermissionAttribute.cs
- SQLString.cs
- ObjectDataSourceMethodEventArgs.cs
- SecureUICommand.cs
- RunClient.cs
- HtmlInputRadioButton.cs
- IFormattable.cs
- DoWorkEventArgs.cs
- WorkflowViewElement.cs
- SingleTagSectionHandler.cs
- RadialGradientBrush.cs
- DataServiceRequest.cs
- WindowsFormsDesignerOptionService.cs
- ScrollableControl.cs
- SystemInformation.cs
- GestureRecognitionResult.cs
- SoapFault.cs
- InstanceDescriptor.cs
- _SafeNetHandles.cs
- CompilerErrorCollection.cs
- Console.cs
- InternalSafeNativeMethods.cs
- QilXmlReader.cs
- DebuggerAttributes.cs