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
- XmlSchemaSearchPattern.cs
- CodeEntryPointMethod.cs
- NativeMethods.cs
- DefinitionBase.cs
- UnsafeMethods.cs
- BevelBitmapEffect.cs
- MetaDataInfo.cs
- SynchronizingStream.cs
- ConfigurationSectionGroupCollection.cs
- MdImport.cs
- NonBatchDirectoryCompiler.cs
- UdpMessageProperty.cs
- SqlFunctionAttribute.cs
- MaterialCollection.cs
- _LazyAsyncResult.cs
- DataSourceControlBuilder.cs
- StorageSetMapping.cs
- ZipArchive.cs
- DoubleAnimationUsingPath.cs
- FamilyMap.cs
- PropertyGridCommands.cs
- OracleConnectionString.cs
- GridViewItemAutomationPeer.cs
- RewritingSimplifier.cs
- XsdDateTime.cs
- DesigntimeLicenseContextSerializer.cs
- RoutedUICommand.cs
- SizeConverter.cs
- ApplicationFileCodeDomTreeGenerator.cs
- LineSegment.cs
- TextEditorTyping.cs
- HierarchicalDataSourceControl.cs
- TableCell.cs
- SqlCaseSimplifier.cs
- TransformProviderWrapper.cs
- TreeNode.cs
- _TLSstream.cs
- TextSelectionHighlightLayer.cs
- ConditionalDesigner.cs
- DeflateEmulationStream.cs
- TextRangeEditLists.cs
- Number.cs
- HuffCodec.cs
- TypeKeyValue.cs
- smtppermission.cs
- TimelineClockCollection.cs
- EncryptedPackageFilter.cs
- HtmlHead.cs
- Brush.cs
- TokenFactoryBase.cs
- WindowsListViewItemStartMenu.cs
- XmlSchemaAnnotation.cs
- DataGridViewRowPrePaintEventArgs.cs
- SessionStateContainer.cs
- GridViewUpdatedEventArgs.cs
- SmiGettersStream.cs
- EdmProviderManifest.cs
- TrustLevel.cs
- SimpleBitVector32.cs
- EasingQuaternionKeyFrame.cs
- AsyncOperation.cs
- HtmlButton.cs
- JavaScriptSerializer.cs
- DataFormats.cs
- SoapAttributeOverrides.cs
- VerificationAttribute.cs
- BindingEditor.xaml.cs
- SequentialUshortCollection.cs
- UrlMappingCollection.cs
- RtfControlWordInfo.cs
- Identity.cs
- xdrvalidator.cs
- TrackingProfileSerializer.cs
- ToolStripItemRenderEventArgs.cs
- EarlyBoundInfo.cs
- ListParagraph.cs
- DirtyTextRange.cs
- EdmProviderManifest.cs
- ListMarkerSourceInfo.cs
- BrowserCapabilitiesCompiler.cs
- SortExpressionBuilder.cs
- ApplicationServicesHostFactory.cs
- RadioButtonFlatAdapter.cs
- XmlChildNodes.cs
- FormViewDeleteEventArgs.cs
- ObjectSecurity.cs
- RootProfilePropertySettingsCollection.cs
- LedgerEntry.cs
- AttributeQuery.cs
- Soap.cs
- RepeatBehaviorConverter.cs
- IndexedWhereQueryOperator.cs
- TemplateManager.cs
- CqlParser.cs
- WindowsFormsLinkLabel.cs
- KeyToListMap.cs
- ConnectionStringEditor.cs
- FastPropertyAccessor.cs
- DataGridTextBox.cs
- SoapInteropTypes.cs