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
- MemberProjectedSlot.cs
- ErrorHandler.cs
- Transform3D.cs
- CannotUnloadAppDomainException.cs
- EllipseGeometry.cs
- WindowsContainer.cs
- ObjectDataProvider.cs
- DataServiceProcessingPipelineEventArgs.cs
- cookiecollection.cs
- StringWriter.cs
- CapabilitiesUse.cs
- FontInfo.cs
- CustomError.cs
- RemoteHelper.cs
- DataSet.cs
- SqlConnectionString.cs
- _LocalDataStoreMgr.cs
- OdbcCommandBuilder.cs
- FileRecordSequenceCompletedAsyncResult.cs
- XamlToRtfWriter.cs
- Triplet.cs
- FileRegion.cs
- CorrelationManager.cs
- WasEndpointConfigContainer.cs
- SmtpNegotiateAuthenticationModule.cs
- XmlSyndicationContent.cs
- XmlSerializableWriter.cs
- JoinCqlBlock.cs
- TableRow.cs
- ProfileSettingsCollection.cs
- ConfigPathUtility.cs
- PropertyGridCommands.cs
- QuaternionIndependentAnimationStorage.cs
- Object.cs
- AliasGenerator.cs
- InvalidCastException.cs
- PackWebRequestFactory.cs
- PersonalizationStateInfo.cs
- FullTextState.cs
- RenderOptions.cs
- ThrowHelper.cs
- LineVisual.cs
- ErrorView.xaml.cs
- MimeMapping.cs
- DockProviderWrapper.cs
- OpCodes.cs
- HostingEnvironmentSection.cs
- UnmanagedMemoryStreamWrapper.cs
- AsymmetricSignatureDeformatter.cs
- ThreadStateException.cs
- PlatformNotSupportedException.cs
- UnsafeNativeMethods.cs
- NamespaceList.cs
- RuntimeCompatibilityAttribute.cs
- IxmlLineInfo.cs
- ObjectDataSourceEventArgs.cs
- DropDownHolder.cs
- ISAPIRuntime.cs
- OdbcException.cs
- Color.cs
- AdornerHitTestResult.cs
- StylusTip.cs
- SqlReorderer.cs
- Grant.cs
- EntityObject.cs
- StylusPointCollection.cs
- SystemFonts.cs
- DataServiceQuery.cs
- DefaultValueConverter.cs
- InvalidOleVariantTypeException.cs
- UserInitiatedNavigationPermission.cs
- TextEditorMouse.cs
- XPathSingletonIterator.cs
- TypeDelegator.cs
- EntityParameterCollection.cs
- DataException.cs
- ItemAutomationPeer.cs
- SmtpDigestAuthenticationModule.cs
- EventWaitHandleSecurity.cs
- XmlLoader.cs
- File.cs
- SimpleMailWebEventProvider.cs
- NamespaceCollection.cs
- HotCommands.cs
- CopyNamespacesAction.cs
- NamedPipeConnectionPoolSettings.cs
- RNGCryptoServiceProvider.cs
- PinnedBufferMemoryStream.cs
- SQLByte.cs
- EdmProviderManifest.cs
- HtmlSelect.cs
- Rectangle.cs
- InheritedPropertyChangedEventArgs.cs
- Variant.cs
- SpecialFolderEnumConverter.cs
- DefaultWorkflowTransactionService.cs
- UnescapedXmlDiagnosticData.cs
- SafeNativeMethods.cs
- RepeaterItemEventArgs.cs
- FormView.cs