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
- GraphicsPath.cs
- HwndAppCommandInputProvider.cs
- WebPartMovingEventArgs.cs
- TextBlockAutomationPeer.cs
- ClientCredentials.cs
- Header.cs
- DateRangeEvent.cs
- ClientRuntimeConfig.cs
- WindowsListViewItemCheckBox.cs
- input.cs
- DesignerSerializerAttribute.cs
- AppSecurityManager.cs
- TreeWalkHelper.cs
- ObservableCollection.cs
- SocketInformation.cs
- NonParentingControl.cs
- SqlDependencyListener.cs
- SemaphoreSlim.cs
- DocobjHost.cs
- CommonEndpointBehaviorElement.cs
- RequestCacheValidator.cs
- ComponentCollection.cs
- SystemTcpStatistics.cs
- CompilationUnit.cs
- DataGridHeadersVisibilityToVisibilityConverter.cs
- MetadataArtifactLoaderFile.cs
- WpfPayload.cs
- _Rfc2616CacheValidators.cs
- PrintPreviewDialog.cs
- OverflowException.cs
- DockAndAnchorLayout.cs
- DataServiceQueryOfT.cs
- LayoutEngine.cs
- ZipIOExtraFieldZip64Element.cs
- TerminateSequence.cs
- PingReply.cs
- DataGridViewColumnEventArgs.cs
- RuntimeArgumentHandle.cs
- CookieProtection.cs
- GatewayDefinition.cs
- InternalBase.cs
- EntityDataSourceEntitySetNameItem.cs
- DataGridViewAccessibleObject.cs
- PropertyDescriptorGridEntry.cs
- WizardForm.cs
- DbXmlEnabledProviderManifest.cs
- StretchValidation.cs
- ConfigXmlAttribute.cs
- ControlOperationBehavior.cs
- COM2ComponentEditor.cs
- EntityCommandDefinition.cs
- ProfileModule.cs
- EmptyArray.cs
- AdPostCacheSubstitution.cs
- XmlReaderSettings.cs
- SafeHandle.cs
- MessageBox.cs
- FormViewDeletedEventArgs.cs
- MimeImporter.cs
- EnumerableRowCollection.cs
- DataControlExtensions.cs
- BeginStoryboard.cs
- DirectoryRootQuery.cs
- AsymmetricKeyExchangeFormatter.cs
- Win32Exception.cs
- Attributes.cs
- PassportIdentity.cs
- AutoScrollHelper.cs
- BinaryWriter.cs
- BoundColumn.cs
- InstanceDescriptor.cs
- LookupBindingPropertiesAttribute.cs
- AliasGenerator.cs
- AssemblyLoader.cs
- ButtonColumn.cs
- RadioButtonStandardAdapter.cs
- ConstraintManager.cs
- WindowsAuthenticationEventArgs.cs
- TaskFileService.cs
- PluralizationService.cs
- ToolstripProfessionalRenderer.cs
- SqlConnection.cs
- RepeatEnumerable.cs
- CqlWriter.cs
- RegexEditorDialog.cs
- ToolStripMenuItem.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- SchemaImporterExtensionsSection.cs
- CorrelationQuery.cs
- GiveFeedbackEventArgs.cs
- XamlClipboardData.cs
- ToolStripTextBox.cs
- SqlCaseSimplifier.cs
- AssemblyLoader.cs
- DataGridViewAdvancedBorderStyle.cs
- DataReceivedEventArgs.cs
- DriveInfo.cs
- RelationshipSet.cs
- TypeValidationEventArgs.cs
- RouteItem.cs