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
- NCryptNative.cs
- Subtree.cs
- ContextDataSource.cs
- PropertyConverter.cs
- CompositionTarget.cs
- XmlSchemaSimpleTypeUnion.cs
- XPathNodeList.cs
- AsymmetricSignatureFormatter.cs
- SelectionEditingBehavior.cs
- ProcessModule.cs
- CodeTypeReference.cs
- SQLRoleProvider.cs
- UserControl.cs
- DynamicQueryableWrapper.cs
- ClientRuntime.cs
- Int32Converter.cs
- Matrix3DConverter.cs
- XmlBoundElement.cs
- CodeRegionDirective.cs
- VBCodeProvider.cs
- _IPv4Address.cs
- CodeGenerator.cs
- ContextConfiguration.cs
- ListItemConverter.cs
- SoapClientMessage.cs
- TextLine.cs
- AuthenticationSchemesHelper.cs
- Peer.cs
- DoubleAnimationUsingKeyFrames.cs
- SelectorAutomationPeer.cs
- SatelliteContractVersionAttribute.cs
- InvokeCompletedEventArgs.cs
- DiscoveryClientDuplexChannel.cs
- NodeInfo.cs
- TextureBrush.cs
- EndGetFileNameFromUserRequest.cs
- TemplateControlParser.cs
- ParseChildrenAsPropertiesAttribute.cs
- DateTimeConstantAttribute.cs
- CryptoApi.cs
- DbProviderManifest.cs
- TrustManagerPromptUI.cs
- MouseEventArgs.cs
- LinearQuaternionKeyFrame.cs
- VirtualDirectoryMapping.cs
- LineServicesRun.cs
- AutomationFocusChangedEventArgs.cs
- IUnknownConstantAttribute.cs
- UpDownEvent.cs
- EntityDesignerDataSourceView.cs
- ColorContextHelper.cs
- ScrollableControl.cs
- CellNormalizer.cs
- WeakEventTable.cs
- RestHandlerFactory.cs
- LocalizableAttribute.cs
- TagPrefixAttribute.cs
- OdbcCommandBuilder.cs
- DSACryptoServiceProvider.cs
- PopupRootAutomationPeer.cs
- SettingsProperty.cs
- DoubleLink.cs
- Panel.cs
- QualifiedCellIdBoolean.cs
- WindowsListViewGroupSubsetLink.cs
- TextElementCollection.cs
- WebControlAdapter.cs
- MetadataFile.cs
- ProtocolsConfiguration.cs
- BasicHttpBindingElement.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- PropertyMetadata.cs
- ExpressionEditorAttribute.cs
- MsdtcClusterUtils.cs
- SqlDataSourceSelectingEventArgs.cs
- SqlProfileProvider.cs
- CatalogPart.cs
- DataFieldCollectionEditor.cs
- RuleInfoComparer.cs
- TraceSwitch.cs
- SchemaNotation.cs
- MaskedTextProvider.cs
- assertwrapper.cs
- HwndHostAutomationPeer.cs
- DbDataSourceEnumerator.cs
- iisPickupDirectory.cs
- AttributeProviderAttribute.cs
- Lease.cs
- MultiTrigger.cs
- HttpCachePolicyWrapper.cs
- CompressedStack.cs
- ModelUtilities.cs
- odbcmetadatafactory.cs
- StrictAndMessageFilter.cs
- UnsafeNetInfoNativeMethods.cs
- DesignBindingPropertyDescriptor.cs
- ResourceType.cs
- Style.cs
- ExtenderProvidedPropertyAttribute.cs
- UriExt.cs