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
- InvokeBase.cs
- DateTimeFormatInfo.cs
- HttpCachePolicyElement.cs
- XmlSchemaObjectCollection.cs
- FilterException.cs
- FileNotFoundException.cs
- UnsafeNativeMethods.cs
- BaseValidatorDesigner.cs
- BamlReader.cs
- Button.cs
- WebPartZoneBase.cs
- AuthenticatedStream.cs
- TransformerTypeCollection.cs
- Model3DCollection.cs
- HelpProvider.cs
- MessageDecoder.cs
- DispatchChannelSink.cs
- UdpConstants.cs
- ExpressionBindingCollection.cs
- ContourSegment.cs
- ObjectViewQueryResultData.cs
- TextElementEnumerator.cs
- NativeCppClassAttribute.cs
- TextSelectionProcessor.cs
- _LoggingObject.cs
- NameValuePermission.cs
- DbDataSourceEnumerator.cs
- AudioDeviceOut.cs
- ValidationSummary.cs
- _LocalDataStoreMgr.cs
- DataGridCell.cs
- ComplusTypeValidator.cs
- PermissionSet.cs
- ElementsClipboardData.cs
- RawStylusInputReport.cs
- LiteralControl.cs
- PageThemeParser.cs
- ChannelSinkStacks.cs
- ListViewSortEventArgs.cs
- StatusBarItem.cs
- FlowLayoutSettings.cs
- DesignerTextViewAdapter.cs
- RequestNavigateEventArgs.cs
- ToolTipAutomationPeer.cs
- GeometryCombineModeValidation.cs
- UserControlParser.cs
- SelectionRange.cs
- SslStream.cs
- MemberInfoSerializationHolder.cs
- TabControlAutomationPeer.cs
- SHA1Managed.cs
- ImageBrush.cs
- TextMarkerSource.cs
- GridViewDeleteEventArgs.cs
- Vector3dCollection.cs
- DataGridTextBoxColumn.cs
- ClientFormsAuthenticationCredentials.cs
- SecurityHelper.cs
- DbProviderConfigurationHandler.cs
- ColumnMapCopier.cs
- XmlQueryType.cs
- TextTreeTextNode.cs
- XmlComment.cs
- TabItemAutomationPeer.cs
- Error.cs
- FontSource.cs
- GlyphTypeface.cs
- ImageSource.cs
- HttpHeaderCollection.cs
- XmlCountingReader.cs
- Speller.cs
- TreeViewDataItemAutomationPeer.cs
- AssociationProvider.cs
- LongTypeConverter.cs
- XpsFilter.cs
- MouseBinding.cs
- SeparatorAutomationPeer.cs
- AudioException.cs
- PropertyMetadata.cs
- Setter.cs
- Model3DGroup.cs
- HtmlInputText.cs
- BrowserCapabilitiesCompiler.cs
- DataGridViewRowPostPaintEventArgs.cs
- RadioButtonAutomationPeer.cs
- StatusBarDrawItemEvent.cs
- EventItfInfo.cs
- PackageRelationship.cs
- UserNameSecurityTokenProvider.cs
- Listen.cs
- ContentTextAutomationPeer.cs
- SafeRightsManagementQueryHandle.cs
- NavigatorOutput.cs
- ProxyManager.cs
- TdsValueSetter.cs
- ConversionContext.cs
- SqlUtils.cs
- ListViewTableRow.cs
- Help.cs
- ToolBar.cs