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
- ByteAnimationUsingKeyFrames.cs
- MonitoringDescriptionAttribute.cs
- DataViewManager.cs
- DataGridCaption.cs
- SynchronizedDispatch.cs
- SplitContainer.cs
- FormViewUpdateEventArgs.cs
- TreeNodeCollectionEditor.cs
- ProcessHostServerConfig.cs
- OleDbPermission.cs
- WebRequestModuleElement.cs
- EventDescriptor.cs
- Soap12ServerProtocol.cs
- DataGridViewColumnHeaderCell.cs
- XmlLanguage.cs
- BinaryQueryOperator.cs
- SqlCommandSet.cs
- CodeCompileUnit.cs
- ArrayConverter.cs
- AutomationIdentifier.cs
- RangeValidator.cs
- DecoderReplacementFallback.cs
- RsaKeyIdentifierClause.cs
- ItemsPanelTemplate.cs
- TypedTableHandler.cs
- Compiler.cs
- DashStyle.cs
- VersionPair.cs
- Point.cs
- SecurityContext.cs
- TearOffProxy.cs
- indexingfiltermarshaler.cs
- ISAPIRuntime.cs
- HttpRawResponse.cs
- SendMessageChannelCache.cs
- isolationinterop.cs
- Model3DCollection.cs
- OleDbDataAdapter.cs
- EventSourceCreationData.cs
- SymDocumentType.cs
- QilPatternVisitor.cs
- MsdtcClusterUtils.cs
- OdbcDataAdapter.cs
- NamedPermissionSet.cs
- MetafileHeader.cs
- localization.cs
- XamlUtilities.cs
- DecoderExceptionFallback.cs
- ToolZoneDesigner.cs
- XmlSerializableReader.cs
- RestHandlerFactory.cs
- DesignRelationCollection.cs
- DbProviderFactories.cs
- CompiledQueryCacheKey.cs
- ViewService.cs
- StringAnimationUsingKeyFrames.cs
- BitConverter.cs
- SqlXml.cs
- RootBrowserWindow.cs
- DataExpression.cs
- SmiEventSink.cs
- StorageMappingItemCollection.cs
- MouseActionConverter.cs
- IgnoreSectionHandler.cs
- DSASignatureFormatter.cs
- HwndHost.cs
- InitializationEventAttribute.cs
- UInt16.cs
- TransformationRules.cs
- DataGridViewCellValueEventArgs.cs
- TreeViewHitTestInfo.cs
- FileUpload.cs
- PropertyValueChangedEvent.cs
- ProxyHwnd.cs
- ExpandableObjectConverter.cs
- keycontainerpermission.cs
- XsdBuilder.cs
- LockedAssemblyCache.cs
- RequestCachingSection.cs
- WorkflowViewElement.cs
- CodeConstructor.cs
- Select.cs
- ActivityStatusChangeEventArgs.cs
- BamlTreeNode.cs
- IndicShape.cs
- XmlSchemaAnyAttribute.cs
- ClientScriptManagerWrapper.cs
- FileEnumerator.cs
- MethodInfo.cs
- ResourcesChangeInfo.cs
- ContextMenu.cs
- XmlStringTable.cs
- DataRelationPropertyDescriptor.cs
- ConfigXmlElement.cs
- ReferencedCollectionType.cs
- Common.cs
- InvalidPrinterException.cs
- RichTextBox.cs
- TypeContext.cs
- CustomAttributeBuilder.cs