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
- mda.cs
- SqlProcedureAttribute.cs
- SqlVisitor.cs
- UriTemplateTable.cs
- DBSqlParser.cs
- TableRow.cs
- EpmSyndicationContentSerializer.cs
- OleStrCAMarshaler.cs
- FileRegion.cs
- DataGridViewColumnConverter.cs
- ProcessInfo.cs
- CategoryNameCollection.cs
- XhtmlBasicCommandAdapter.cs
- SHA512.cs
- SqlBuffer.cs
- DES.cs
- TransformedBitmap.cs
- _TimerThread.cs
- WindowsAltTab.cs
- SerializationAttributes.cs
- AutomationElementIdentifiers.cs
- RIPEMD160Managed.cs
- ErrorRuntimeConfig.cs
- SendContent.cs
- Translator.cs
- ServiceOperationViewControl.cs
- EraserBehavior.cs
- TransportSecurityHelpers.cs
- FunctionNode.cs
- MissingMethodException.cs
- DropShadowBitmapEffect.cs
- WmlLiteralTextAdapter.cs
- SqlCacheDependency.cs
- DataBoundControlDesigner.cs
- PtsHelper.cs
- Comparer.cs
- ByteAnimation.cs
- ToolStripMenuItem.cs
- WebConfigurationHostFileChange.cs
- externdll.cs
- GatewayDefinition.cs
- HwndHostAutomationPeer.cs
- ListSourceHelper.cs
- CompilerParameters.cs
- X509IssuerSerialKeyIdentifierClause.cs
- HttpServerUtilityBase.cs
- DataMisalignedException.cs
- StorageFunctionMapping.cs
- DataGridViewDataConnection.cs
- DeleteMemberBinder.cs
- ElementUtil.cs
- Merger.cs
- PolicyException.cs
- StringValidator.cs
- ClientSponsor.cs
- SiteMapDataSourceView.cs
- WrapperEqualityComparer.cs
- DeflateEmulationStream.cs
- InkPresenterAutomationPeer.cs
- ApplicationId.cs
- CornerRadiusConverter.cs
- odbcmetadatafactory.cs
- SurrogateEncoder.cs
- ResourceContainerWrapper.cs
- WindowsGraphicsCacheManager.cs
- ObjectQueryState.cs
- ServicePointManagerElement.cs
- QueryCacheEntry.cs
- PropertyBuilder.cs
- InvalidMessageContractException.cs
- ScriptServiceAttribute.cs
- StateMachineSubscription.cs
- Latin1Encoding.cs
- Size3D.cs
- DataViewSetting.cs
- SortedDictionary.cs
- XhtmlBasicLabelAdapter.cs
- RunWorkerCompletedEventArgs.cs
- Quack.cs
- DataChangedEventManager.cs
- ControlPropertyNameConverter.cs
- DataGridView.cs
- SafeCancelMibChangeNotify.cs
- SoapObjectWriter.cs
- TrackingConditionCollection.cs
- _ListenerAsyncResult.cs
- StdValidatorsAndConverters.cs
- Typeface.cs
- ImageKeyConverter.cs
- WebControlsSection.cs
- XmlSchemaComplexContentRestriction.cs
- SpanIndex.cs
- PersonalizationProvider.cs
- LifetimeServices.cs
- ServiceInstanceProvider.cs
- SharedPerformanceCounter.cs
- CheckBoxBaseAdapter.cs
- ITextView.cs
- CookieHandler.cs
- TreeViewAutomationPeer.cs