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
- TimeSpanValidator.cs
- FlowLayoutSettings.cs
- TreeViewAutomationPeer.cs
- Symbol.cs
- EUCJPEncoding.cs
- DocumentPageTextView.cs
- AsymmetricAlgorithm.cs
- WsatTransactionInfo.cs
- TraceInternal.cs
- Bold.cs
- CacheEntry.cs
- WebDescriptionAttribute.cs
- SecUtil.cs
- ClientRolePrincipal.cs
- EventPropertyMap.cs
- TableRowCollection.cs
- TextRange.cs
- StatusBarAutomationPeer.cs
- PropertySourceInfo.cs
- ObjectQueryState.cs
- DataRowView.cs
- Point.cs
- GrowingArray.cs
- PnrpPermission.cs
- WebPartDisplayModeCancelEventArgs.cs
- Win32.cs
- DayRenderEvent.cs
- DelayedRegex.cs
- NonParentingControl.cs
- CodeExpressionCollection.cs
- milexports.cs
- SwitchLevelAttribute.cs
- Pointer.cs
- mongolianshape.cs
- _NegoStream.cs
- MessageUtil.cs
- AppSettingsReader.cs
- IssuanceTokenProviderBase.cs
- PresentationTraceSources.cs
- RolePrincipal.cs
- GraphicsPathIterator.cs
- AsyncOperation.cs
- ColorConvertedBitmapExtension.cs
- ToolBarButton.cs
- VerificationException.cs
- AdRotator.cs
- CompiledQuery.cs
- SqlConnectionString.cs
- HttpApplication.cs
- DistinctQueryOperator.cs
- LinkDescriptor.cs
- Operator.cs
- Parser.cs
- XmlObjectSerializerReadContextComplexJson.cs
- ActionItem.cs
- UIAgentRequest.cs
- AsnEncodedData.cs
- ItemCheckedEvent.cs
- ImageKeyConverter.cs
- TreeNodeStyle.cs
- XsdBuilder.cs
- UseLicense.cs
- CodeTryCatchFinallyStatement.cs
- RadialGradientBrush.cs
- ReadOnlyPropertyMetadata.cs
- AstNode.cs
- RootProfilePropertySettingsCollection.cs
- WebDisplayNameAttribute.cs
- BitmapFrame.cs
- ContextBase.cs
- ColorConvertedBitmapExtension.cs
- FormClosedEvent.cs
- CmsUtils.cs
- ThemeableAttribute.cs
- ImageConverter.cs
- CorruptStoreException.cs
- SupportsEventValidationAttribute.cs
- TransformValueSerializer.cs
- ScriptMethodAttribute.cs
- LocalTransaction.cs
- XmlValueConverter.cs
- Pair.cs
- TreeNodeEventArgs.cs
- MoveSizeWinEventHandler.cs
- SoapRpcServiceAttribute.cs
- ApplicationFileCodeDomTreeGenerator.cs
- RichTextBox.cs
- Opcode.cs
- WsdlWriter.cs
- DataRowView.cs
- MimeParameters.cs
- Int64AnimationBase.cs
- BaseCollection.cs
- GroupItemAutomationPeer.cs
- SettingsPropertyNotFoundException.cs
- PolyBezierSegmentFigureLogic.cs
- WpfSharedBamlSchemaContext.cs
- MediaElementAutomationPeer.cs
- ApplicationHost.cs
- InkCanvas.cs