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
- Model3DGroup.cs
- DefaultSection.cs
- EmptyEnumerable.cs
- CharacterBuffer.cs
- XamlStackWriter.cs
- ExceptionHelpers.cs
- EvidenceBase.cs
- TextElementEnumerator.cs
- Context.cs
- ConfigurationValues.cs
- StackOverflowException.cs
- MetadataExporter.cs
- ObjectViewFactory.cs
- PerformanceCounterManager.cs
- ConfigurationSectionGroup.cs
- GenericIdentity.cs
- ChameleonKey.cs
- DetailsViewPageEventArgs.cs
- RequestCacheManager.cs
- LogReserveAndAppendState.cs
- IxmlLineInfo.cs
- RecoverInstanceLocksCommand.cs
- Parser.cs
- ToolStripDropDownMenu.cs
- Win32Exception.cs
- StorageSetMapping.cs
- SessionStateContainer.cs
- Calendar.cs
- NavigationFailedEventArgs.cs
- DataSourceConverter.cs
- DrawingVisual.cs
- TagNameToTypeMapper.cs
- DoubleLinkList.cs
- DataGridTextBox.cs
- TemporaryBitmapFile.cs
- GetMemberBinder.cs
- Highlights.cs
- BindingMAnagerBase.cs
- SystemColors.cs
- ImageMetadata.cs
- ImageSourceConverter.cs
- SchemaEntity.cs
- LookupNode.cs
- IChannel.cs
- ExtendedProtectionPolicyElement.cs
- RegexCaptureCollection.cs
- SpellerHighlightLayer.cs
- WebPartRestoreVerb.cs
- SineEase.cs
- DataGridViewComboBoxEditingControl.cs
- FileVersion.cs
- NamespaceCollection.cs
- RequestUriProcessor.cs
- MultiView.cs
- InitializationEventAttribute.cs
- RoleManagerModule.cs
- DataRowExtensions.cs
- RequestBringIntoViewEventArgs.cs
- XmlSchemaInferenceException.cs
- SqlDelegatedTransaction.cs
- DataGridViewRowsAddedEventArgs.cs
- SpeechSynthesizer.cs
- ClientTargetCollection.cs
- TrackPointCollection.cs
- TabletCollection.cs
- StateValidator.cs
- WindowsImpersonationContext.cs
- SafeProcessHandle.cs
- UIAgentMonitorHandle.cs
- SqlConnectionHelper.cs
- ReflectEventDescriptor.cs
- EventSourceCreationData.cs
- StatusBarDrawItemEvent.cs
- Queue.cs
- GridViewRow.cs
- ListDictionary.cs
- RecognizerInfo.cs
- WebPartConnectionsEventArgs.cs
- MappingException.cs
- CompositeFontInfo.cs
- DataReaderContainer.cs
- GeneralTransform3DTo2DTo3D.cs
- Or.cs
- CollectionAdapters.cs
- DataColumnCollection.cs
- DependencyObjectProvider.cs
- XmlCustomFormatter.cs
- CompiledQueryCacheEntry.cs
- WebBrowserPermission.cs
- SqlClientFactory.cs
- Menu.cs
- TextDpi.cs
- Point.cs
- CmsUtils.cs
- KeyedPriorityQueue.cs
- ToolBarButtonClickEvent.cs
- RepeatButtonAutomationPeer.cs
- AnimationTimeline.cs
- URLIdentityPermission.cs
- TcpSocketManager.cs