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
- HashAlgorithm.cs
- PolyQuadraticBezierSegment.cs
- ImageClickEventArgs.cs
- SerializationTrace.cs
- HttpListenerRequest.cs
- LayoutEvent.cs
- _SecureChannel.cs
- TemplateBindingExtensionConverter.cs
- TCEAdapterGenerator.cs
- TreeView.cs
- Help.cs
- ListItemConverter.cs
- Underline.cs
- IdleTimeoutMonitor.cs
- CalendarDay.cs
- ListParaClient.cs
- DetailsViewPagerRow.cs
- WebPartAddingEventArgs.cs
- ActivationArguments.cs
- CommonObjectSecurity.cs
- PointConverter.cs
- SystemIPAddressInformation.cs
- TraceLog.cs
- Nullable.cs
- NodeCounter.cs
- ScopelessEnumAttribute.cs
- FixedSOMImage.cs
- TextContainerChangedEventArgs.cs
- DrawingVisual.cs
- UnauthorizedAccessException.cs
- _ChunkParse.cs
- ToolBarButton.cs
- BufferedStream.cs
- NativeMethods.cs
- PatternMatcher.cs
- MemoryMappedViewStream.cs
- GradientBrush.cs
- WebPartDeleteVerb.cs
- XmlQueryRuntime.cs
- EditorZoneDesigner.cs
- SkipQueryOptionExpression.cs
- GlyphingCache.cs
- PageThemeCodeDomTreeGenerator.cs
- PageSettings.cs
- ClassDataContract.cs
- OracleTransaction.cs
- Html32TextWriter.cs
- SqlMethodTransformer.cs
- ChangeBlockUndoRecord.cs
- CodeNamespace.cs
- OracleConnectionString.cs
- TailPinnedEventArgs.cs
- BindingSource.cs
- Expression.cs
- WebPartCancelEventArgs.cs
- MediaCommands.cs
- HtmlInputHidden.cs
- TimerEventSubscriptionCollection.cs
- ProjectionCamera.cs
- ProvidersHelper.cs
- ExternalCalls.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- SignatureDescription.cs
- SapiGrammar.cs
- CodeAttachEventStatement.cs
- TreeNodeStyle.cs
- WebZone.cs
- DataGridViewCellStyleConverter.cs
- Monitor.cs
- ListParagraph.cs
- FontDifferentiator.cs
- SystemIPv4InterfaceProperties.cs
- BuiltInExpr.cs
- ToolStripHighContrastRenderer.cs
- Decimal.cs
- GridViewSelectEventArgs.cs
- log.cs
- Grant.cs
- xml.cs
- ScriptingRoleServiceSection.cs
- Serializer.cs
- MetabaseSettingsIis7.cs
- SpellerHighlightLayer.cs
- LazyTextWriterCreator.cs
- XsdCachingReader.cs
- WindowsGrip.cs
- QueryParameter.cs
- FileChangesMonitor.cs
- CreateUserErrorEventArgs.cs
- StrongNameMembershipCondition.cs
- ClientUrlResolverWrapper.cs
- RegexMatchCollection.cs
- WeakHashtable.cs
- HeaderPanel.cs
- PolyQuadraticBezierSegment.cs
- DataObject.cs
- ConfigurationSectionGroupCollection.cs
- IPHostEntry.cs
- itemelement.cs
- ChannelAcceptor.cs