Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DocumentPageViewAutomationPeer.cs
- HttpCapabilitiesEvaluator.cs
- IntPtr.cs
- EqualityComparer.cs
- BulletedListEventArgs.cs
- GeneralTransform3D.cs
- BrowserDefinitionCollection.cs
- TypeForwardedToAttribute.cs
- BuildProviderAppliesToAttribute.cs
- Volatile.cs
- InstanceDataCollection.cs
- XmlArrayAttribute.cs
- KeyInstance.cs
- TableCellsCollectionEditor.cs
- RedirectionProxy.cs
- ActiveXHelper.cs
- CommandTreeTypeHelper.cs
- EventItfInfo.cs
- SoapUnknownHeader.cs
- XPathNode.cs
- MergePropertyDescriptor.cs
- UnsafeNativeMethods.cs
- XmlParserContext.cs
- KnownTypes.cs
- And.cs
- BufferedReceiveElement.cs
- MatrixValueSerializer.cs
- DataRelationPropertyDescriptor.cs
- HtmlWindow.cs
- TemplateBindingExpressionConverter.cs
- ColorConvertedBitmapExtension.cs
- Figure.cs
- TypeLibConverter.cs
- IIS7WorkerRequest.cs
- AndCondition.cs
- altserialization.cs
- OpenTypeLayout.cs
- DBSqlParserTableCollection.cs
- OleDbDataReader.cs
- SetStateEventArgs.cs
- BuildResultCache.cs
- PixelFormat.cs
- Button.cs
- StateRuntime.cs
- LogEntryHeaderSerializer.cs
- TextRunProperties.cs
- MultipleViewProviderWrapper.cs
- ListControlConvertEventArgs.cs
- NamespaceQuery.cs
- ImpersonateTokenRef.cs
- XmlSerializerNamespaces.cs
- RenderOptions.cs
- SmtpClient.cs
- SeparatorAutomationPeer.cs
- IncrementalHitTester.cs
- DataStreamFromComStream.cs
- PageTheme.cs
- CredentialCache.cs
- ToolStripControlHost.cs
- Geometry.cs
- MergeEnumerator.cs
- StatusCommandUI.cs
- BinaryNode.cs
- TextParagraphProperties.cs
- DateTimeConstantAttribute.cs
- ChameleonKey.cs
- PersonalizationProviderHelper.cs
- XamlFilter.cs
- ErrorRuntimeConfig.cs
- MinimizableAttributeTypeConverter.cs
- StreamUpgradeProvider.cs
- PageBreakRecord.cs
- XPathItem.cs
- CodeIndexerExpression.cs
- DataSourceDescriptorCollection.cs
- MediaElement.cs
- FixedHighlight.cs
- MatrixTransform3D.cs
- ResourceDescriptionAttribute.cs
- SecurityVersion.cs
- BulletedListEventArgs.cs
- CallContext.cs
- FolderBrowserDialog.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- CodeTypeParameter.cs
- CachedCompositeFamily.cs
- DownloadProgressEventArgs.cs
- CheckedListBox.cs
- DropDownList.cs
- PropertyMapper.cs
- Pool.cs
- ExpressionLink.cs
- TemplateControlCodeDomTreeGenerator.cs
- DrawingBrush.cs
- Adorner.cs
- WsdlImporter.cs
- ColumnCollection.cs
- DataGridViewUtilities.cs
- AssemblyCollection.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs