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
- ActivityTypeCodeDomSerializer.cs
- MILUtilities.cs
- HtmlLabelAdapter.cs
- TableLayoutStyleCollection.cs
- ScalarConstant.cs
- DataGridColumnHeaderItemAutomationPeer.cs
- DoubleCollectionConverter.cs
- ParsedAttributeCollection.cs
- CancellationTokenSource.cs
- OleServicesContext.cs
- ColorTranslator.cs
- AvTrace.cs
- SafeFileMappingHandle.cs
- StatusBarDrawItemEvent.cs
- MessageLoggingFilterTraceRecord.cs
- TriggerAction.cs
- TextEditorCopyPaste.cs
- AttributedMetaModel.cs
- CompilationUnit.cs
- WebBrowserNavigatedEventHandler.cs
- TextElementEnumerator.cs
- ImageField.cs
- webeventbuffer.cs
- HttpPostProtocolReflector.cs
- Utils.cs
- StylusTouchDevice.cs
- IndexedString.cs
- Panel.cs
- Gdiplus.cs
- RunClient.cs
- MetadataWorkspace.cs
- ExpressionBindings.cs
- BevelBitmapEffect.cs
- HttpCapabilitiesSectionHandler.cs
- COM2AboutBoxPropertyDescriptor.cs
- XmlSchemaSimpleContent.cs
- HttpWrapper.cs
- SchemaElement.cs
- Facet.cs
- _LazyAsyncResult.cs
- SqlDataSourceDesigner.cs
- DirectionalAction.cs
- TreeNodeConverter.cs
- RawUIStateInputReport.cs
- ReflectPropertyDescriptor.cs
- XamlStream.cs
- SchemaMapping.cs
- BufferedGraphics.cs
- UpdateRecord.cs
- Mouse.cs
- NativeWrapper.cs
- SoapInteropTypes.cs
- LineSegment.cs
- Gdiplus.cs
- ExpressionServices.cs
- ParagraphVisual.cs
- TagPrefixCollection.cs
- xsdvalidator.cs
- ComboBox.cs
- SafeRightsManagementSessionHandle.cs
- StringOutput.cs
- StatusStrip.cs
- Int64.cs
- __TransparentProxy.cs
- MenuItemCollectionEditorDialog.cs
- LinqToSqlWrapper.cs
- MultipleViewPattern.cs
- XmlSchemaObjectCollection.cs
- WebResourceAttribute.cs
- ClientFormsIdentity.cs
- CompiledELinqQueryState.cs
- HandlerFactoryCache.cs
- CheckBox.cs
- CompositeActivityTypeDescriptor.cs
- ServiceSecurityAuditElement.cs
- PassportAuthenticationModule.cs
- TextMessageEncodingElement.cs
- NativeObjectSecurity.cs
- PackUriHelper.cs
- HotSpot.cs
- BinaryObjectInfo.cs
- ExtractedStateEntry.cs
- NotSupportedException.cs
- DataTableReaderListener.cs
- ClassDataContract.cs
- DetailsViewInsertEventArgs.cs
- ObjectReaderCompiler.cs
- PrivilegedConfigurationManager.cs
- ByteStreamGeometryContext.cs
- XamlFilter.cs
- ListViewPagedDataSource.cs
- FileLoadException.cs
- HtmlInputPassword.cs
- OneOfTypeConst.cs
- WindowsEditBox.cs
- jithelpers.cs
- DeclarativeCatalogPart.cs
- processwaithandle.cs
- ElementHostPropertyMap.cs
- TakeQueryOptionExpression.cs