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
- DataBindingExpressionBuilder.cs
- SafeNativeMethodsCLR.cs
- ApplicationTrust.cs
- AsyncParams.cs
- SynchronizingStream.cs
- TraversalRequest.cs
- BindingOperations.cs
- TreeBuilder.cs
- TraceHandler.cs
- SqlProfileProvider.cs
- TranslateTransform.cs
- ListViewCancelEventArgs.cs
- GCHandleCookieTable.cs
- WindowsRebar.cs
- ObservableDictionary.cs
- Matrix3DConverter.cs
- FormViewCommandEventArgs.cs
- MetadataArtifactLoaderCompositeResource.cs
- VersionedStream.cs
- SqlClientPermission.cs
- CodeMemberField.cs
- ExpandSegmentCollection.cs
- ComAdminInterfaces.cs
- LocalizationComments.cs
- AQNBuilder.cs
- AssertFilter.cs
- TextCompositionEventArgs.cs
- ConfigurationCollectionAttribute.cs
- OperatingSystem.cs
- AuthenticatedStream.cs
- AsymmetricAlgorithm.cs
- SequentialOutput.cs
- CurrentChangedEventManager.cs
- Pair.cs
- RolePrincipal.cs
- Activation.cs
- TableNameAttribute.cs
- KeyManager.cs
- ThreadStaticAttribute.cs
- QueryTaskGroupState.cs
- XmlAnyAttributeAttribute.cs
- filewebresponse.cs
- AuthorizationRule.cs
- AdCreatedEventArgs.cs
- ScrollableControl.cs
- ObjectListCommandEventArgs.cs
- IISMapPath.cs
- NGCPageContentSerializerAsync.cs
- assemblycache.cs
- CompiledRegexRunnerFactory.cs
- ReflectionHelper.cs
- LineMetrics.cs
- Compiler.cs
- DesignerOptionService.cs
- TextParaLineResult.cs
- SelectedGridItemChangedEvent.cs
- KeyProperty.cs
- SymmetricAlgorithm.cs
- ReaderWriterLock.cs
- BuildProvider.cs
- MessageEnumerator.cs
- MessageQueuePermissionAttribute.cs
- DynamicControlParameter.cs
- ProtocolsConfiguration.cs
- cookiecontainer.cs
- TextEditorCharacters.cs
- PersonalizationEntry.cs
- CaseInsensitiveOrdinalStringComparer.cs
- CompModHelpers.cs
- StorageEntityContainerMapping.cs
- ScrollItemProviderWrapper.cs
- IsolatedStorageFileStream.cs
- AuthorizationRuleCollection.cs
- ResourceWriter.cs
- ChildTable.cs
- CompoundFileDeflateTransform.cs
- XslCompiledTransform.cs
- FunctionNode.cs
- HatchBrush.cs
- DataObjectSettingDataEventArgs.cs
- ToolStripDropDownClosedEventArgs.cs
- XmlElementList.cs
- AssemblyResourceLoader.cs
- FormsAuthenticationUserCollection.cs
- InvalidPipelineStoreException.cs
- GrowingArray.cs
- Rotation3DAnimation.cs
- Bitmap.cs
- MouseButtonEventArgs.cs
- BitmapImage.cs
- InvalidOleVariantTypeException.cs
- SimpleWebHandlerParser.cs
- HttpCachePolicyWrapper.cs
- CollectionViewSource.cs
- ParameterCollectionEditor.cs
- GridViewSelectEventArgs.cs
- Bidi.cs
- ProcessHostFactoryHelper.cs
- BaseCodePageEncoding.cs
- ObjectListComponentEditor.cs