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
- Selector.cs
- FormView.cs
- TextBoxBase.cs
- LicenseProviderAttribute.cs
- ValidatorCompatibilityHelper.cs
- PopupRootAutomationPeer.cs
- StrongNameKeyPair.cs
- FieldCollectionEditor.cs
- AttachedPropertyMethodSelector.cs
- RuntimeResourceSet.cs
- OutputCacheProfileCollection.cs
- TableParagraph.cs
- Html32TextWriter.cs
- Menu.cs
- UnhandledExceptionEventArgs.cs
- EdmItemError.cs
- Queue.cs
- ScriptControl.cs
- WindowsListBox.cs
- DataGridViewCellCancelEventArgs.cs
- DependencyPropertyHelper.cs
- XmlResolver.cs
- DataTableNewRowEvent.cs
- CodeLabeledStatement.cs
- SponsorHelper.cs
- unitconverter.cs
- SwitchLevelAttribute.cs
- ListItemViewAttribute.cs
- QueryCacheManager.cs
- SecureStringHasher.cs
- DecoratedNameAttribute.cs
- CellLabel.cs
- XmlJsonWriter.cs
- XmlnsDefinitionAttribute.cs
- InstanceCreationEditor.cs
- FormsAuthenticationUserCollection.cs
- FocusTracker.cs
- KeyGesture.cs
- FileSystemInfo.cs
- WorkflowMarkupSerializationException.cs
- ParameterDataSourceExpression.cs
- UdpConstants.cs
- FramingEncoders.cs
- GeneralTransform3DTo2D.cs
- InputLanguageManager.cs
- ManagedIStream.cs
- CodeSnippetStatement.cs
- SmtpFailedRecipientException.cs
- WebPartZone.cs
- Grant.cs
- CodeIdentifier.cs
- RegexWorker.cs
- SimpleWorkerRequest.cs
- HtmlMeta.cs
- InvalidEnumArgumentException.cs
- CalendarData.cs
- RecognizerInfo.cs
- RoutedEventArgs.cs
- FormParameter.cs
- BufferAllocator.cs
- TrackingStringDictionary.cs
- InkPresenterAutomationPeer.cs
- StretchValidation.cs
- Point.cs
- SoapTransportImporter.cs
- HostingEnvironmentSection.cs
- BinaryMethodMessage.cs
- StreamWithDictionary.cs
- VectorAnimationUsingKeyFrames.cs
- PersistenceTypeAttribute.cs
- Bezier.cs
- RestHandler.cs
- WebScriptEndpointElement.cs
- BasePropertyDescriptor.cs
- WmlLiteralTextAdapter.cs
- SchemaObjectWriter.cs
- ColumnWidthChangedEvent.cs
- HwndMouseInputProvider.cs
- CodeDesigner.cs
- SyndicationItem.cs
- OutKeywords.cs
- RootBrowserWindow.cs
- ValidationRuleCollection.cs
- DataControlCommands.cs
- ToolTipService.cs
- IApplicationTrustManager.cs
- SHA256Cng.cs
- WorkflowRuntimeServiceElement.cs
- HtmlTitle.cs
- UshortList2.cs
- DbResourceAllocator.cs
- SiteMapNodeItemEventArgs.cs
- BaseTemplateParser.cs
- Debug.cs
- MachineSettingsSection.cs
- XmlILCommand.cs
- MsmqOutputSessionChannel.cs
- ObjectSecurity.cs
- XXXOnTypeBuilderInstantiation.cs
- KerberosTicketHashIdentifierClause.cs