Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RoleBoolean.cs
- KeyTime.cs
- DesignTimeTemplateParser.cs
- X509InitiatorCertificateClientElement.cs
- ToolboxItemCollection.cs
- BamlLocalizationDictionary.cs
- filewebrequest.cs
- EntityDataSourceDesigner.cs
- FormatSettings.cs
- WmlPhoneCallAdapter.cs
- CompilerInfo.cs
- WindowsUserNameCachingSecurityTokenAuthenticator.cs
- XsdBuilder.cs
- wmiprovider.cs
- WebPartMinimizeVerb.cs
- BreakSafeBase.cs
- PresentationSource.cs
- ToolStripManager.cs
- DataBinder.cs
- ComponentManagerBroker.cs
- Quaternion.cs
- QualifiedCellIdBoolean.cs
- ValidationRuleCollection.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- DropTarget.cs
- MarkupCompiler.cs
- JoinTreeSlot.cs
- ConvertEvent.cs
- InvalidateEvent.cs
- CollectionViewProxy.cs
- PackagePartCollection.cs
- CharKeyFrameCollection.cs
- ObjectPersistData.cs
- XmlElementList.cs
- AssemblyNameProxy.cs
- X509ChainElement.cs
- StringWriter.cs
- SqlDataSourceTableQuery.cs
- ClassicBorderDecorator.cs
- HtmlElementCollection.cs
- InkCanvasSelection.cs
- WMICapabilities.cs
- SerializationUtilities.cs
- SqlUtils.cs
- PackagePart.cs
- DataSourceCollectionBase.cs
- HintTextConverter.cs
- LinqDataSourceValidationException.cs
- UserControlCodeDomTreeGenerator.cs
- DynamicRenderer.cs
- PersonalizationAdministration.cs
- RegexFCD.cs
- Assert.cs
- ZipIOExtraFieldElement.cs
- OwnerDrawPropertyBag.cs
- TextBoxBase.cs
- BinaryReader.cs
- HwndStylusInputProvider.cs
- SocketElement.cs
- StatusBar.cs
- CornerRadius.cs
- SettingsContext.cs
- Helper.cs
- EntityDataSourceDataSelectionPanel.cs
- UnhandledExceptionEventArgs.cs
- MsmqHostedTransportManager.cs
- TypeToStringValueConverter.cs
- ParserOptions.cs
- SQLDouble.cs
- TcpAppDomainProtocolHandler.cs
- HotSpotCollection.cs
- LinearGradientBrush.cs
- DeflateStream.cs
- CustomAttributeFormatException.cs
- PreviewPageInfo.cs
- StringAnimationUsingKeyFrames.cs
- typedescriptorpermissionattribute.cs
- PixelFormats.cs
- JoinSymbol.cs
- NativeRecognizer.cs
- RelatedPropertyManager.cs
- SharedDp.cs
- ChildrenQuery.cs
- FormViewUpdateEventArgs.cs
- ImageListStreamer.cs
- StoreItemCollection.cs
- StickyNoteHelper.cs
- EnglishPluralizationService.cs
- BinHexDecoder.cs
- FixedDSBuilder.cs
- ClientSettings.cs
- SegmentInfo.cs
- DesignTimeVisibleAttribute.cs
- ProcessInputEventArgs.cs
- EventLogEntryCollection.cs
- PropertyPathWorker.cs
- SecurityContext.cs
- TemplateBamlRecordReader.cs
- PageCache.cs
- DiscoveryClientReferences.cs