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
- PrePostDescendentsWalker.cs
- SqlMethodAttribute.cs
- ServiceModelActivationSectionGroup.cs
- ToolBar.cs
- TdsParser.cs
- SeekableReadStream.cs
- BaseCodeDomTreeGenerator.cs
- PageTheme.cs
- ObjectAnimationUsingKeyFrames.cs
- HtmlEncodedRawTextWriter.cs
- CellParagraph.cs
- MailDefinition.cs
- MimeTypeAttribute.cs
- VSWCFServiceContractGenerator.cs
- Queue.cs
- entityreference_tresulttype.cs
- LineSegment.cs
- BigInt.cs
- GenericRootAutomationPeer.cs
- BoolLiteral.cs
- UnsafeNativeMethodsPenimc.cs
- LogExtent.cs
- HttpContextWrapper.cs
- PrintingPermission.cs
- LiteralControl.cs
- SafeHandle.cs
- RenderData.cs
- sitestring.cs
- HMACSHA256.cs
- ToolboxItemSnapLineBehavior.cs
- InvalidOperationException.cs
- PersonalizableAttribute.cs
- StateMachineWorkflowInstance.cs
- WebPartRestoreVerb.cs
- NullableIntSumAggregationOperator.cs
- PersistenceContextEnlistment.cs
- UnionExpr.cs
- SafeTimerHandle.cs
- ObjectHelper.cs
- FrameworkTemplate.cs
- Executor.cs
- CopyOfAction.cs
- DataColumnPropertyDescriptor.cs
- DataRecordObjectView.cs
- ColorContextHelper.cs
- CommandLineParser.cs
- OdbcDataAdapter.cs
- InkCanvas.cs
- RequestDescription.cs
- MessageSmuggler.cs
- ScriptResourceAttribute.cs
- XmlElementAttributes.cs
- _ContextAwareResult.cs
- ScriptDescriptor.cs
- TranslateTransform.cs
- DataSourceExpression.cs
- StorageTypeMapping.cs
- Utils.cs
- NativeMethods.cs
- WebPartCollection.cs
- EntryPointNotFoundException.cs
- LoginUtil.cs
- UiaCoreApi.cs
- InternalControlCollection.cs
- DataGridColumnsPage.cs
- BasicSecurityProfileVersion.cs
- Properties.cs
- WizardForm.cs
- ButtonPopupAdapter.cs
- WindowsEditBoxRange.cs
- ScriptResourceAttribute.cs
- SafeNativeMethods.cs
- IISMapPath.cs
- ControlPropertyNameConverter.cs
- NonClientArea.cs
- XmlArrayItemAttributes.cs
- ObjectQueryProvider.cs
- BrowserTree.cs
- CompilerWrapper.cs
- PropertyValueUIItem.cs
- Utilities.cs
- AnnotationAdorner.cs
- SystemIPInterfaceProperties.cs
- DataGridTablesFactory.cs
- Executor.cs
- ListSortDescriptionCollection.cs
- TraceXPathNavigator.cs
- KoreanCalendar.cs
- TableCellCollection.cs
- LifetimeServices.cs
- Debug.cs
- EventSetter.cs
- DataContractJsonSerializerOperationBehavior.cs
- XpsFilter.cs
- RawStylusInputCustomDataList.cs
- input.cs
- SafeFileMappingHandle.cs
- RealizationContext.cs
- ScrollItemProviderWrapper.cs
- LeftCellWrapper.cs