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
- counter.cs
- Triangle.cs
- CapabilitiesRule.cs
- UnmanagedMemoryStream.cs
- DesignerCalendarAdapter.cs
- AmbientValueAttribute.cs
- ActivityMetadata.cs
- BaseTemplateBuildProvider.cs
- ToolStripProgressBar.cs
- LexicalChunk.cs
- CompositeFontParser.cs
- BaseParagraph.cs
- XmlReflectionImporter.cs
- DataServiceExpressionVisitor.cs
- ResourceDisplayNameAttribute.cs
- WebPartConnectVerb.cs
- MetaType.cs
- SetterBaseCollection.cs
- GroupDescription.cs
- ServiceChannelManager.cs
- TypedTableBaseExtensions.cs
- GridSplitter.cs
- MenuItemCollectionEditor.cs
- tooltip.cs
- WebBrowser.cs
- DoubleConverter.cs
- TdsEnums.cs
- WindowsContainer.cs
- WebServiceHost.cs
- Odbc32.cs
- ListViewGroup.cs
- WebScriptMetadataFormatter.cs
- StandardOleMarshalObject.cs
- CommandField.cs
- ComponentChangingEvent.cs
- BinaryWriter.cs
- DiagnosticsConfigurationHandler.cs
- HandlerBase.cs
- DataListCommandEventArgs.cs
- RSAPKCS1SignatureFormatter.cs
- ReadOnlyAttribute.cs
- __FastResourceComparer.cs
- SQLBytesStorage.cs
- BamlLocalizableResource.cs
- DbBuffer.cs
- ApplicationId.cs
- DrawListViewColumnHeaderEventArgs.cs
- _DigestClient.cs
- ProjectionPathSegment.cs
- HelloMessage11.cs
- _IPv4Address.cs
- CmsUtils.cs
- SeekStoryboard.cs
- CellRelation.cs
- InvokePatternIdentifiers.cs
- TrackBarDesigner.cs
- WindowsToolbar.cs
- DataFormat.cs
- TextWriter.cs
- VerticalAlignConverter.cs
- JournalEntryStack.cs
- SplashScreenNativeMethods.cs
- XmlSerializationReader.cs
- ToolStripContentPanelRenderEventArgs.cs
- UriExt.cs
- Vector.cs
- XmlException.cs
- DeploymentSection.cs
- CryptoStream.cs
- CacheRequest.cs
- LinqDataSourceContextEventArgs.cs
- FixUp.cs
- CellQuery.cs
- CodeMemberField.cs
- StrongBox.cs
- GrammarBuilderDictation.cs
- mediaeventargs.cs
- IdentityModelDictionary.cs
- AuthenticationException.cs
- TypeBrowserDialog.cs
- EndpointConfigContainer.cs
- GenericUriParser.cs
- CmsInterop.cs
- FlowLayoutPanelDesigner.cs
- WmlControlAdapter.cs
- MatrixValueSerializer.cs
- CellConstantDomain.cs
- CodeVariableReferenceExpression.cs
- RSAPKCS1SignatureFormatter.cs
- DesignerActionKeyboardBehavior.cs
- PTUtility.cs
- DbParameterCollection.cs
- SyndicationDeserializer.cs
- Base64Stream.cs
- EntityReference.cs
- COM2Enum.cs
- SingleConverter.cs
- XPathEmptyIterator.cs
- XmlSchemaAttributeGroupRef.cs
- BorderGapMaskConverter.cs