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
- SoapInteropTypes.cs
- ObjectTypeMapping.cs
- WebServiceResponse.cs
- DynamicValidator.cs
- ColumnWidthChangedEvent.cs
- SerTrace.cs
- FormCollection.cs
- TableProviderWrapper.cs
- TrackingProfileCache.cs
- SimpleWorkerRequest.cs
- SequenceNumber.cs
- Roles.cs
- IndependentAnimationStorage.cs
- PkcsMisc.cs
- TextUtf8RawTextWriter.cs
- RenderData.cs
- TrailingSpaceComparer.cs
- DocumentReference.cs
- LowerCaseStringConverter.cs
- FileLoadException.cs
- Int32.cs
- PersonalizationProvider.cs
- CipherData.cs
- TemplatedWizardStep.cs
- SecurityPermission.cs
- BuildManager.cs
- XhtmlTextWriter.cs
- Guid.cs
- SendingRequestEventArgs.cs
- BinaryParser.cs
- CodeObject.cs
- StrongNamePublicKeyBlob.cs
- KeyPressEvent.cs
- WebPartDisplayMode.cs
- XPathParser.cs
- BitmapInitialize.cs
- ItemCheckEvent.cs
- TraceEventCache.cs
- CustomAttribute.cs
- VersionedStreamOwner.cs
- __ComObject.cs
- ReturnValue.cs
- WindowsFormsSectionHandler.cs
- oledbmetadatacolumnnames.cs
- ToolStripDesignerAvailabilityAttribute.cs
- WpfKnownMemberInvoker.cs
- TextEditor.cs
- RequestQueryParser.cs
- AspCompat.cs
- XmlChildNodes.cs
- _SSPISessionCache.cs
- WebPartDeleteVerb.cs
- HtmlElementErrorEventArgs.cs
- printdlgexmarshaler.cs
- RelationshipConstraintValidator.cs
- ImageListUtils.cs
- OperatingSystem.cs
- DigestComparer.cs
- InternalConfigEventArgs.cs
- QueryLifecycle.cs
- HMAC.cs
- PointHitTestResult.cs
- ComplexTypeEmitter.cs
- OrderedDictionaryStateHelper.cs
- TextTreeObjectNode.cs
- AssociationTypeEmitter.cs
- TreeWalker.cs
- BaseDataBoundControl.cs
- SafePEFileHandle.cs
- SettingsBindableAttribute.cs
- ResourceDefaultValueAttribute.cs
- BeginStoryboard.cs
- Triangle.cs
- WebReferencesBuildProvider.cs
- OutputCacheSettings.cs
- MediaContextNotificationWindow.cs
- Animatable.cs
- ContentPosition.cs
- TypeLibConverter.cs
- DataBoundControlAdapter.cs
- GridEntryCollection.cs
- ConstrainedDataObject.cs
- MinMaxParagraphWidth.cs
- LambdaCompiler.Unary.cs
- MediaCommands.cs
- TreeChangeInfo.cs
- Perspective.cs
- PermissionSetEnumerator.cs
- DrawingVisualDrawingContext.cs
- smtpconnection.cs
- BufferedOutputStream.cs
- ToolBarOverflowPanel.cs
- DocumentApplicationState.cs
- WebBrowser.cs
- SerialReceived.cs
- EntityChangedParams.cs
- TemplateParser.cs
- ImpersonateTokenRef.cs
- CodeTypeDeclaration.cs
- wmiprovider.cs