Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / Log / System / IO / Log / AppendHelper.cs / 1305376 / AppendHelper.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Runtime.InteropServices; namespace System.IO.Log { class AppendHelper : IDisposable { SequenceNumber prev; SequenceNumber next; FileLogRecordHeader header; UnmanagedBlob[] blobs; GCHandle[] handles; public AppendHelper(IList> data, SequenceNumber prev, SequenceNumber next, bool restartArea) { this.prev = prev; this.next = next; this.header = new FileLogRecordHeader(null); this.header.IsRestartArea = restartArea; this.header.PreviousLsn = prev; this.header.NextUndoLsn = next; this.blobs = new UnmanagedBlob[data.Count + 1]; this.handles = new GCHandle[data.Count + 1]; try { this.handles[0] = GCHandle.Alloc(header.Bits, GCHandleType.Pinned); this.blobs[0].cbSize = (uint)FileLogRecordHeader.Size; this.blobs[0].pBlobData = Marshal.UnsafeAddrOfPinnedArrayElement(header.Bits, 0); for (int i = 0; i < data.Count; i++) { handles[i + 1] = GCHandle.Alloc(data[i].Array, GCHandleType.Pinned); blobs[i + 1].cbSize = (uint)data[i].Count; blobs[i + 1].pBlobData = Marshal.UnsafeAddrOfPinnedArrayElement(data[i].Array, data[i].Offset); } } catch { Dispose(); throw; } } public UnmanagedBlob[] Blobs { get { return this.blobs; } } // Caller should always call Dispose. Finalizer not implemented. public void Dispose() { try { lock(this) { for (int i = 0; i < handles.Length; i++) { if (handles[i].IsAllocated) handles[i].Free(); } } } catch(InvalidOperationException exception) { // This indicates something is broken in IO.Log's memory management, // so it's not safe to continue executing DiagnosticUtility.InvokeFinalHandler(exception); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Runtime.InteropServices; namespace System.IO.Log { class AppendHelper : IDisposable { SequenceNumber prev; SequenceNumber next; FileLogRecordHeader header; UnmanagedBlob[] blobs; GCHandle[] handles; public AppendHelper(IList > data, SequenceNumber prev, SequenceNumber next, bool restartArea) { this.prev = prev; this.next = next; this.header = new FileLogRecordHeader(null); this.header.IsRestartArea = restartArea; this.header.PreviousLsn = prev; this.header.NextUndoLsn = next; this.blobs = new UnmanagedBlob[data.Count + 1]; this.handles = new GCHandle[data.Count + 1]; try { this.handles[0] = GCHandle.Alloc(header.Bits, GCHandleType.Pinned); this.blobs[0].cbSize = (uint)FileLogRecordHeader.Size; this.blobs[0].pBlobData = Marshal.UnsafeAddrOfPinnedArrayElement(header.Bits, 0); for (int i = 0; i < data.Count; i++) { handles[i + 1] = GCHandle.Alloc(data[i].Array, GCHandleType.Pinned); blobs[i + 1].cbSize = (uint)data[i].Count; blobs[i + 1].pBlobData = Marshal.UnsafeAddrOfPinnedArrayElement(data[i].Array, data[i].Offset); } } catch { Dispose(); throw; } } public UnmanagedBlob[] Blobs { get { return this.blobs; } } // Caller should always call Dispose. Finalizer not implemented. public void Dispose() { try { lock(this) { for (int i = 0; i < handles.Length; i++) { if (handles[i].IsAllocated) handles[i].Free(); } } } catch(InvalidOperationException exception) { // This indicates something is broken in IO.Log's memory management, // so it's not safe to continue executing DiagnosticUtility.InvokeFinalHandler(exception); } } } } // 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
- ObjectQuery.cs
- CDSCollectionETWBCLProvider.cs
- RangeValidator.cs
- SqlUserDefinedAggregateAttribute.cs
- CombinedGeometry.cs
- CompressionTracing.cs
- ImageListImage.cs
- DatePickerTextBox.cs
- CachedPathData.cs
- HighlightVisual.cs
- DataObjectCopyingEventArgs.cs
- ConfigurationPropertyAttribute.cs
- CurrencyWrapper.cs
- _AcceptOverlappedAsyncResult.cs
- ObjectComplexPropertyMapping.cs
- ComAwareEventInfo.cs
- StyleTypedPropertyAttribute.cs
- DataGridRow.cs
- RegexCode.cs
- ScriptReferenceEventArgs.cs
- TextEditorLists.cs
- RectValueSerializer.cs
- ItemCheckEvent.cs
- PageTheme.cs
- SmiMetaDataProperty.cs
- ReadOnlyDictionary.cs
- LogStream.cs
- TextParagraphProperties.cs
- DataSetSchema.cs
- Rotation3D.cs
- RectAnimation.cs
- DecoderNLS.cs
- FixedElement.cs
- TextRangeEditTables.cs
- PlanCompilerUtil.cs
- HeaderedContentControl.cs
- NavigateEvent.cs
- _RequestCacheProtocol.cs
- StickyNoteContentControl.cs
- SizeIndependentAnimationStorage.cs
- SystemIPInterfaceProperties.cs
- ValidatorUtils.cs
- ControlParser.cs
- HtmlHistory.cs
- RuntimeResourceSet.cs
- CompilationUnit.cs
- TraceListener.cs
- TaiwanLunisolarCalendar.cs
- RadioButtonBaseAdapter.cs
- ScriptRegistrationManager.cs
- SiteMapDataSourceView.cs
- Control.cs
- FixedSOMSemanticBox.cs
- EventKeyword.cs
- XmlSchemaNotation.cs
- ProfilePropertySettings.cs
- QuestionEventArgs.cs
- oledbconnectionstring.cs
- TypeElement.cs
- DrawingContextFlattener.cs
- CustomUserNameSecurityTokenAuthenticator.cs
- ObjectHandle.cs
- cookie.cs
- UpDownBase.cs
- RawStylusInputReport.cs
- FormsAuthenticationModule.cs
- HelpKeywordAttribute.cs
- WebPartsSection.cs
- MergeEnumerator.cs
- ColorConverter.cs
- SolidColorBrush.cs
- XmlQueryStaticData.cs
- SelectionManager.cs
- FrameworkContextData.cs
- _IPv6Address.cs
- ProfilePropertySettingsCollection.cs
- UIElement3D.cs
- TreeViewDataItemAutomationPeer.cs
- StorageAssociationSetMapping.cs
- MethodBuilderInstantiation.cs
- ImplicitInputBrush.cs
- ReadOnlyCollection.cs
- RecoverInstanceLocksCommand.cs
- ComAwareEventInfo.cs
- TransformPattern.cs
- FlatButtonAppearance.cs
- MemoryRecordBuffer.cs
- RawUIStateInputReport.cs
- Funcletizer.cs
- DispatcherExceptionEventArgs.cs
- VoiceChangeEventArgs.cs
- SafeThreadHandle.cs
- WebPartZone.cs
- UnsafeNativeMethods.cs
- SessionSwitchEventArgs.cs
- SortFieldComparer.cs
- NonVisualControlAttribute.cs
- ApplyTemplatesAction.cs
- ColorAnimation.cs
- OleDbEnumerator.cs