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
- LambdaCompiler.ControlFlow.cs
- Int64KeyFrameCollection.cs
- UserPreferenceChangedEventArgs.cs
- ObjectDataSourceView.cs
- QilPatternVisitor.cs
- TextEditorParagraphs.cs
- EdmRelationshipRoleAttribute.cs
- CreateUserWizardStep.cs
- WorkflowRuntimeServiceElementCollection.cs
- CollectionBase.cs
- FormatConvertedBitmap.cs
- ListBoxItemAutomationPeer.cs
- RequestQueryProcessor.cs
- AttachedPropertyMethodSelector.cs
- MapPathBasedVirtualPathProvider.cs
- CheckBoxDesigner.cs
- exports.cs
- ImageSource.cs
- DataObjectCopyingEventArgs.cs
- figurelengthconverter.cs
- DateTimeAutomationPeer.cs
- ValueTypeFixupInfo.cs
- DisplayClaim.cs
- TextBoxAutomationPeer.cs
- ValueCollectionParameterReader.cs
- InputDevice.cs
- Storyboard.cs
- MasterPageBuildProvider.cs
- InvokeFunc.cs
- TdsRecordBufferSetter.cs
- MulticastOption.cs
- SupportsEventValidationAttribute.cs
- Section.cs
- Misc.cs
- StorageTypeMapping.cs
- ConnectionConsumerAttribute.cs
- DateTimeFormatInfo.cs
- UserPreferenceChangedEventArgs.cs
- XmlObjectSerializerWriteContextComplexJson.cs
- Atom10FeedFormatter.cs
- PrintingPermission.cs
- ArcSegment.cs
- DataSourceHelper.cs
- TypeConverter.cs
- CodeStatementCollection.cs
- AutomationElementCollection.cs
- HeaderLabel.cs
- SecureUICommand.cs
- XPathException.cs
- UnsafeNativeMethods.cs
- ArrayWithOffset.cs
- TemplateControl.cs
- DatatypeImplementation.cs
- SQLBytesStorage.cs
- DataGridViewRowStateChangedEventArgs.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- OpenTypeLayoutCache.cs
- InternalPolicyElement.cs
- XamlNamespaceHelper.cs
- HtmlInputButton.cs
- PersonalizablePropertyEntry.cs
- PipeStream.cs
- ButtonBaseDesigner.cs
- TypeRefElement.cs
- NamespaceExpr.cs
- TemporaryBitmapFile.cs
- Object.cs
- ReadWriteObjectLock.cs
- AuthorizationRuleCollection.cs
- HttpFileCollectionBase.cs
- WrappedReader.cs
- QilLiteral.cs
- basevalidator.cs
- FontClient.cs
- PageTheme.cs
- TdsEnums.cs
- SHA1CryptoServiceProvider.cs
- ScrollItemPatternIdentifiers.cs
- SmtpTransport.cs
- ScrollViewerAutomationPeer.cs
- SystemIPInterfaceStatistics.cs
- ReadWriteSpinLock.cs
- OdbcConnectionString.cs
- TreeView.cs
- SchemaUtility.cs
- FormClosedEvent.cs
- SqlServer2KCompatibilityAnnotation.cs
- RadioButtonBaseAdapter.cs
- SessionPageStatePersister.cs
- UInt32.cs
- VectorCollection.cs
- AppearanceEditorPart.cs
- RenderCapability.cs
- __FastResourceComparer.cs
- ToolboxBitmapAttribute.cs
- HtmlInputHidden.cs
- EncodingTable.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- RuleSettingsCollection.cs
- MimeMultiPart.cs