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
- ToolStripItemTextRenderEventArgs.cs
- Switch.cs
- ColorConverter.cs
- ImageAutomationPeer.cs
- DataGridViewEditingControlShowingEventArgs.cs
- OrderByLifter.cs
- WebPartAuthorizationEventArgs.cs
- Pair.cs
- Intellisense.cs
- DllNotFoundException.cs
- ObjectAnimationUsingKeyFrames.cs
- ObjectListComponentEditor.cs
- PrimitiveType.cs
- FilterException.cs
- BamlTreeMap.cs
- PointConverter.cs
- metadatamappinghashervisitor.hashsourcebuilder.cs
- Char.cs
- Span.cs
- SignatureDescription.cs
- RequestCachingSection.cs
- WizardStepBase.cs
- GridView.cs
- UpdateTranslator.cs
- ServiceReference.cs
- ValueQuery.cs
- EncodingNLS.cs
- WebPageTraceListener.cs
- ThousandthOfEmRealDoubles.cs
- MulticastDelegate.cs
- Grid.cs
- _SingleItemRequestCache.cs
- TdsRecordBufferSetter.cs
- SqlConnectionString.cs
- TitleStyle.cs
- ThrowHelper.cs
- UidManager.cs
- FacetEnabledSchemaElement.cs
- EntityTemplateUserControl.cs
- QilSortKey.cs
- RegexGroup.cs
- NumberFormatInfo.cs
- TextEndOfSegment.cs
- XmlEntityReference.cs
- NamespaceEmitter.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- IntPtr.cs
- EntityDataSourceChangedEventArgs.cs
- LookupBindingPropertiesAttribute.cs
- DrawListViewColumnHeaderEventArgs.cs
- RootDesignerSerializerAttribute.cs
- FormatException.cs
- HtmlImage.cs
- UriTemplateDispatchFormatter.cs
- FontFamilyValueSerializer.cs
- TemplateKey.cs
- TaiwanCalendar.cs
- EncryptedKey.cs
- Utility.cs
- ListViewCommandEventArgs.cs
- UserPreferenceChangingEventArgs.cs
- controlskin.cs
- SchemaNamespaceManager.cs
- TrackingStringDictionary.cs
- CacheModeConverter.cs
- Transform3D.cs
- RefreshEventArgs.cs
- ToolStripActionList.cs
- ToolStripRendererSwitcher.cs
- EditingCoordinator.cs
- OleDbReferenceCollection.cs
- AddInDeploymentState.cs
- PrePostDescendentsWalker.cs
- WindowsSolidBrush.cs
- RegexStringValidatorAttribute.cs
- PathSegmentCollection.cs
- OperationAbortedException.cs
- WindowsScrollBar.cs
- MultiTouchSystemGestureLogic.cs
- ServiceHttpHandlerFactory.cs
- HierarchicalDataTemplate.cs
- ScalarOps.cs
- InvalidOleVariantTypeException.cs
- NativeMethods.cs
- BitmapEffectInput.cs
- GroupBox.cs
- MetadataArtifactLoaderComposite.cs
- SqlDataSourceEnumerator.cs
- MultiTrigger.cs
- UnsafeNativeMethods.cs
- DataTemplateKey.cs
- ChooseAction.cs
- SQLDouble.cs
- PathGeometry.cs
- PageHandlerFactory.cs
- DataException.cs
- StringSource.cs
- DatePickerDateValidationErrorEventArgs.cs
- QueryLifecycle.cs
- Viewport3DAutomationPeer.cs