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
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- ClientBuildManager.cs
- ContextQuery.cs
- SimpleExpression.cs
- FilterableAttribute.cs
- ResizeGrip.cs
- Model3D.cs
- XXXInfos.cs
- HtmlInputHidden.cs
- SortedList.cs
- ValidationErrorInfo.cs
- StylusCollection.cs
- AdRotator.cs
- MeasureData.cs
- PersonalizationProviderCollection.cs
- DateTimeOffsetConverter.cs
- TreeViewAutomationPeer.cs
- IntegerCollectionEditor.cs
- Rect3D.cs
- StorageComplexTypeMapping.cs
- DateTimeFormat.cs
- X509Certificate2.cs
- DefaultMemberAttribute.cs
- HtmlInputReset.cs
- SchemaCollectionPreprocessor.cs
- InputLanguageEventArgs.cs
- LZCodec.cs
- XmlAtomicValue.cs
- ExpandSegmentCollection.cs
- Rotation3D.cs
- DataGridViewCellContextMenuStripNeededEventArgs.cs
- MonthChangedEventArgs.cs
- RIPEMD160.cs
- RandomDelayQueuedSendsAsyncResult.cs
- CustomValidator.cs
- querybuilder.cs
- DropSource.cs
- FormViewInsertEventArgs.cs
- AvTraceDetails.cs
- DocumentCollection.cs
- EventDrivenDesigner.cs
- TextCollapsingProperties.cs
- MissingSatelliteAssemblyException.cs
- GridView.cs
- DBCSCodePageEncoding.cs
- StringReader.cs
- DeleteMemberBinder.cs
- RadioButton.cs
- NativeMethodsCLR.cs
- WorkflowApplicationUnhandledExceptionEventArgs.cs
- Attributes.cs
- RIPEMD160.cs
- UdpDiscoveryEndpointProvider.cs
- ToolStripSeparator.cs
- ElapsedEventArgs.cs
- ConfigXmlAttribute.cs
- InteropTrackingRecord.cs
- SqlDataReader.cs
- DataSysAttribute.cs
- RoleBoolean.cs
- FixedBufferAttribute.cs
- GreenMethods.cs
- DefaultProxySection.cs
- GridItemCollection.cs
- DataTableTypeConverter.cs
- TemplateModeChangedEventArgs.cs
- TimersDescriptionAttribute.cs
- AsymmetricSignatureDeformatter.cs
- WmpBitmapDecoder.cs
- TextTreeNode.cs
- ListSortDescriptionCollection.cs
- DependencyProperty.cs
- FileClassifier.cs
- ColorEditor.cs
- VersionedStreamOwner.cs
- Point4DValueSerializer.cs
- CodeValidator.cs
- WindowsFormsHelpers.cs
- FileSystemWatcher.cs
- ApplicationDirectoryMembershipCondition.cs
- SaveWorkflowAsyncResult.cs
- DispatcherOperation.cs
- WebGetAttribute.cs
- WebResourceUtil.cs
- CollectionContainer.cs
- TrustDriver.cs
- OdbcRowUpdatingEvent.cs
- CannotUnloadAppDomainException.cs
- EmbeddedMailObjectsCollection.cs
- WebAdminConfigurationHelper.cs
- Rectangle.cs
- XmlSchemaSimpleContentRestriction.cs
- StrongNameHelpers.cs
- MasterPageParser.cs
- AuthenticationServiceManager.cs
- EntityDesignerDataSourceView.cs
- GeneratedContractType.cs
- PerformanceCounterPermission.cs
- ChangeProcessor.cs
- FormParameter.cs