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
- LinkArea.cs
- StateFinalizationActivity.cs
- WsatExtendedInformation.cs
- BitmapCache.cs
- FrameworkContextData.cs
- DataGridViewCellCollection.cs
- AttributeProviderAttribute.cs
- PackageProperties.cs
- RelationshipWrapper.cs
- InstanceKeyView.cs
- LayoutManager.cs
- EntityDataSourceMemberPath.cs
- TagPrefixInfo.cs
- DataStreams.cs
- ZoneIdentityPermission.cs
- ProgressBar.cs
- BindableTemplateBuilder.cs
- SiteMembershipCondition.cs
- HttpStreamXmlDictionaryReader.cs
- FontFamily.cs
- SchemaObjectWriter.cs
- TimeoutException.cs
- SecurityCriticalDataForSet.cs
- ScrollableControl.cs
- PermissionRequestEvidence.cs
- SiteMap.cs
- ImageField.cs
- OracleParameterBinding.cs
- UnmanagedMarshal.cs
- EventLogEntryCollection.cs
- SettingsAttributes.cs
- RoutedEventHandlerInfo.cs
- ActivityInfo.cs
- WebScriptServiceHostFactory.cs
- EventMap.cs
- FrameworkContentElement.cs
- AuthorizationBehavior.cs
- JsonDeserializer.cs
- UnlockInstanceAsyncResult.cs
- ClientBuildManagerCallback.cs
- RegistrySecurity.cs
- Matrix3D.cs
- XpsDocument.cs
- DataGridViewDataConnection.cs
- WasHttpHandlersInstallComponent.cs
- IsolatedStorageException.cs
- JournalEntryStack.cs
- Base64Encoder.cs
- SQLInt32Storage.cs
- WindowsTitleBar.cs
- FileDetails.cs
- SqlProvider.cs
- BrowserCapabilitiesCodeGenerator.cs
- ControlParameter.cs
- TextEffect.cs
- SqlDataSourceCommandEventArgs.cs
- selecteditemcollection.cs
- COM2EnumConverter.cs
- OracleString.cs
- RightsManagementEncryptedStream.cs
- ToolStripContentPanelRenderEventArgs.cs
- HttpInputStream.cs
- ReachSerializer.cs
- ClipboardData.cs
- SerializationEventsCache.cs
- DataBindingCollection.cs
- DataGridViewRowContextMenuStripNeededEventArgs.cs
- BuildProviderCollection.cs
- BamlRecords.cs
- XmlQueryRuntime.cs
- Codec.cs
- IDReferencePropertyAttribute.cs
- ThreadInterruptedException.cs
- WrapperEqualityComparer.cs
- TransactionFilter.cs
- HelpEvent.cs
- GeneralTransformGroup.cs
- TransformationRules.cs
- EdmItemCollection.cs
- TextEditorSpelling.cs
- TagPrefixCollection.cs
- SecureConversationServiceElement.cs
- FragmentNavigationEventArgs.cs
- ListViewCancelEventArgs.cs
- XslException.cs
- ObjectContext.cs
- FamilyMap.cs
- FileStream.cs
- mda.cs
- ListViewSortEventArgs.cs
- HealthMonitoringSectionHelper.cs
- SoundPlayer.cs
- ThicknessAnimationBase.cs
- DesignerInterfaces.cs
- MD5CryptoServiceProvider.cs
- RecognitionEventArgs.cs
- QilValidationVisitor.cs
- MessageEncoder.cs
- QueueProcessor.cs
- ValidatedMobileControlConverter.cs