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
- DateTimeUtil.cs
- SqlTypesSchemaImporter.cs
- ProtocolViolationException.cs
- SqlBuilder.cs
- Dictionary.cs
- PrivilegeNotHeldException.cs
- HandledEventArgs.cs
- AuthenticationService.cs
- DataGrid.cs
- CommentAction.cs
- MiniCustomAttributeInfo.cs
- ResourceManager.cs
- CodeSubDirectory.cs
- Renderer.cs
- EncoderParameters.cs
- arabicshape.cs
- BCryptSafeHandles.cs
- ReliabilityContractAttribute.cs
- ContextMenu.cs
- WebServiceErrorEvent.cs
- TemplateBindingExtension.cs
- ButtonStandardAdapter.cs
- ParallelQuery.cs
- SqlGenericUtil.cs
- TreeViewDesigner.cs
- GlyphRunDrawing.cs
- CombinedHttpChannel.cs
- DiagnosticsConfiguration.cs
- VerificationException.cs
- Root.cs
- StateMachineSubscription.cs
- RegistryDataKey.cs
- JsonServiceDocumentSerializer.cs
- FontStretchConverter.cs
- RoutingService.cs
- HwndSourceKeyboardInputSite.cs
- PolicyImporterElement.cs
- XamlInt32CollectionSerializer.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- CacheChildrenQuery.cs
- BindingExpressionBase.cs
- SQLBinary.cs
- NavigationHelper.cs
- SmiConnection.cs
- SqlDataSourceView.cs
- CodeDirectionExpression.cs
- GestureRecognizer.cs
- BuildProviderUtils.cs
- TextTreeNode.cs
- COM2FontConverter.cs
- AssemblyInfo.cs
- WorkflowInlining.cs
- FormViewInsertedEventArgs.cs
- FileLogRecordEnumerator.cs
- ColumnResizeUndoUnit.cs
- CompositeDesignerAccessibleObject.cs
- httpstaticobjectscollection.cs
- StandardBindingImporter.cs
- SortQuery.cs
- OperatingSystem.cs
- HyperLink.cs
- WebPartTransformerCollection.cs
- TypeInitializationException.cs
- ReadContentAsBinaryHelper.cs
- IdnMapping.cs
- XmlAnyAttributeAttribute.cs
- VectorCollectionConverter.cs
- EncoderFallback.cs
- UnaryQueryOperator.cs
- GridItemCollection.cs
- QualifiedCellIdBoolean.cs
- TraceContextRecord.cs
- ArgumentOutOfRangeException.cs
- ProcessHost.cs
- DataGridViewCellLinkedList.cs
- CombinedGeometry.cs
- EdgeModeValidation.cs
- FixedSchema.cs
- NonValidatingSecurityTokenAuthenticator.cs
- OuterGlowBitmapEffect.cs
- JumpList.cs
- BuildProviderAppliesToAttribute.cs
- FormatterConverter.cs
- UInt16Storage.cs
- VSWCFServiceContractGenerator.cs
- PersonalizationProviderHelper.cs
- GetLastErrorDetailsRequest.cs
- StringAnimationBase.cs
- XPathQueryGenerator.cs
- newinstructionaction.cs
- SvcMapFileLoader.cs
- WindowsSecurityToken.cs
- AddInPipelineAttributes.cs
- TableAutomationPeer.cs
- ResourceExpressionBuilder.cs
- FixedPosition.cs
- PrintDocument.cs
- DecoderNLS.cs
- _NativeSSPI.cs
- PrintPreviewControl.cs