Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Log / System / IO / Log / LogReservationCollection.cs / 1305376 / LogReservationCollection.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace System.IO.Log
{
using System;
using System.IO.Log;
// NOTE: The reservations in the collection do not account for
// header sizes, out of necessity. The reservations made
// with the record sequence *do* account for header sizes.
//
// In order to maintain sanity, the record sequence only
// deals with reservations that include the header
// size. i.e., if it goes into CLFS, it has the header size
// appended to it.
//
// So that means: If we receive a size from the collection,
// add the header size to it before returning it. If we
// receive a size from our code, subtract the header size
// before giving it to the collection.
//
// Keep this straight, or else.
//
sealed class LogReservationCollection : ReservationCollection
{
LogRecordSequence recordSequence;
internal LogReservationCollection(LogRecordSequence sequence)
{
this.recordSequence = sequence;
}
internal LogRecordSequence RecordSequence
{
get { return this.recordSequence; }
}
internal long GetMatchingReservation(long size)
{
// Reservation coming from CLFS, subtract record header
// size.
//
size -= LogLogRecordHeader.Size;
size = GetBestMatchingReservation(size);
if (size == -1)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ReservationNotFound());
// Reservation coming from the collection, add record
// header size.
//
size += LogLogRecordHeader.Size;
return size;
}
internal void InternalAddReservation(long size)
{
// Reservation coming from CLFS, remove record header
// size.
//
size -= LogLogRecordHeader.Size;
ReservationMade(size);
}
protected override void MakeReservation(long size)
{
if (size < 0)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("size"));
// Reservation coming from collection, add record header
// size.
//
size += LogLogRecordHeader.Size;
long aligned;
UnsafeNativeMethods.AlignReservedLogSingle(
this.recordSequence.MarshalContext,
size,
out aligned);
UnsafeNativeMethods.AllocReservedLog(
this.recordSequence.MarshalContext,
1,
ref aligned);
}
protected override void FreeReservation(long size)
{
if (size < 0)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("size"));
lock(this.recordSequence.LogStore.SyncRoot)
{
SafeMarshalContext context = this.recordSequence.InternalMarshalContext ;
if(context == null || context.IsInvalid)
{
return;
}
// Reservation coming from collection, add record header
// size.
//
size += LogLogRecordHeader.Size;
long aligned;
UnsafeNativeMethods.AlignReservedLogSingle(
context,
size,
out aligned);
// Adjustment must be negative, otherwise it's considered
// a "set". (Yuck.)
//
aligned = -aligned;
UnsafeNativeMethods.FreeReservedLog(
context,
1,
ref aligned);
}
}
}
}
// 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.IO.Log;
// NOTE: The reservations in the collection do not account for
// header sizes, out of necessity. The reservations made
// with the record sequence *do* account for header sizes.
//
// In order to maintain sanity, the record sequence only
// deals with reservations that include the header
// size. i.e., if it goes into CLFS, it has the header size
// appended to it.
//
// So that means: If we receive a size from the collection,
// add the header size to it before returning it. If we
// receive a size from our code, subtract the header size
// before giving it to the collection.
//
// Keep this straight, or else.
//
sealed class LogReservationCollection : ReservationCollection
{
LogRecordSequence recordSequence;
internal LogReservationCollection(LogRecordSequence sequence)
{
this.recordSequence = sequence;
}
internal LogRecordSequence RecordSequence
{
get { return this.recordSequence; }
}
internal long GetMatchingReservation(long size)
{
// Reservation coming from CLFS, subtract record header
// size.
//
size -= LogLogRecordHeader.Size;
size = GetBestMatchingReservation(size);
if (size == -1)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ReservationNotFound());
// Reservation coming from the collection, add record
// header size.
//
size += LogLogRecordHeader.Size;
return size;
}
internal void InternalAddReservation(long size)
{
// Reservation coming from CLFS, remove record header
// size.
//
size -= LogLogRecordHeader.Size;
ReservationMade(size);
}
protected override void MakeReservation(long size)
{
if (size < 0)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("size"));
// Reservation coming from collection, add record header
// size.
//
size += LogLogRecordHeader.Size;
long aligned;
UnsafeNativeMethods.AlignReservedLogSingle(
this.recordSequence.MarshalContext,
size,
out aligned);
UnsafeNativeMethods.AllocReservedLog(
this.recordSequence.MarshalContext,
1,
ref aligned);
}
protected override void FreeReservation(long size)
{
if (size < 0)
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(Error.ArgumentOutOfRange("size"));
lock(this.recordSequence.LogStore.SyncRoot)
{
SafeMarshalContext context = this.recordSequence.InternalMarshalContext ;
if(context == null || context.IsInvalid)
{
return;
}
// Reservation coming from collection, add record header
// size.
//
size += LogLogRecordHeader.Size;
long aligned;
UnsafeNativeMethods.AlignReservedLogSingle(
context,
size,
out aligned);
// Adjustment must be negative, otherwise it's considered
// a "set". (Yuck.)
//
aligned = -aligned;
UnsafeNativeMethods.FreeReservedLog(
context,
1,
ref aligned);
}
}
}
}
// 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
- ToolStripRenderEventArgs.cs
- MatrixTransform3D.cs
- GridView.cs
- CompositeFontInfo.cs
- IPAddress.cs
- ContentType.cs
- SafeNativeMemoryHandle.cs
- FindCriteria11.cs
- XmlFileEditor.cs
- webbrowsersite.cs
- Int64Storage.cs
- ImportContext.cs
- CodeRegionDirective.cs
- SqlUdtInfo.cs
- DescendantOverDescendantQuery.cs
- SoapDocumentServiceAttribute.cs
- SwitchLevelAttribute.cs
- SqlMethodTransformer.cs
- Message.cs
- HtmlForm.cs
- DiscoveryClientElement.cs
- SecurityHeaderElementInferenceEngine.cs
- TemplateControlBuildProvider.cs
- FormClosedEvent.cs
- HttpModuleCollection.cs
- ToolStripItemImageRenderEventArgs.cs
- TraceLog.cs
- TreeView.cs
- GenerateScriptTypeAttribute.cs
- WmlPanelAdapter.cs
- XmlAnyAttributeAttribute.cs
- XamlToRtfWriter.cs
- XmlUtil.cs
- AdPostCacheSubstitution.cs
- ErrorTableItemStyle.cs
- ScriptIgnoreAttribute.cs
- StylusPlugin.cs
- MetadataCollection.cs
- CompilationRelaxations.cs
- PageCodeDomTreeGenerator.cs
- ObjectManager.cs
- Metafile.cs
- SafeNativeMethods.cs
- ProfileModule.cs
- BlockExpression.cs
- DataViewSetting.cs
- WebSysDefaultValueAttribute.cs
- tooltip.cs
- HandleCollector.cs
- SettingsAttributeDictionary.cs
- StaticResourceExtension.cs
- RenderDataDrawingContext.cs
- SByte.cs
- DerivedKeySecurityToken.cs
- mactripleDES.cs
- CodeRemoveEventStatement.cs
- RootAction.cs
- DaylightTime.cs
- TiffBitmapEncoder.cs
- StateWorkerRequest.cs
- TextTreeObjectNode.cs
- FunctionDefinition.cs
- OfTypeExpression.cs
- Storyboard.cs
- SchemaContext.cs
- InfoCardSymmetricAlgorithm.cs
- DataStorage.cs
- FrameworkContentElementAutomationPeer.cs
- OleDbConnectionFactory.cs
- TextRangeEdit.cs
- HttpWebRequest.cs
- QilCloneVisitor.cs
- TraceListeners.cs
- HelpEvent.cs
- Accessible.cs
- ApplicationHost.cs
- CollaborationHelperFunctions.cs
- FixedStringLookup.cs
- IndependentAnimationStorage.cs
- DataGridViewDataConnection.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- TabControlEvent.cs
- externdll.cs
- SmtpAuthenticationManager.cs
- GeneralTransform3DTo2D.cs
- StopStoryboard.cs
- PersonalizationEntry.cs
- DataObjectMethodAttribute.cs
- WindowsSpinner.cs
- WebPartHelpVerb.cs
- CheckBoxField.cs
- SourceElementsCollection.cs
- ListBox.cs
- EventLogPermission.cs
- PropertyDescriptorCollection.cs
- formatter.cs
- ForceCopyBuildProvider.cs
- ParallelDesigner.cs
- AuthenticationModuleElementCollection.cs
- ExtensionSurface.cs