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
- XsltOutput.cs
- TextPattern.cs
- SessionState.cs
- SqlFileStream.cs
- DES.cs
- PictureBox.cs
- Debug.cs
- IsolatedStorageFileStream.cs
- ClientSideProviderDescription.cs
- NameSpaceExtractor.cs
- PenThreadPool.cs
- FeatureSupport.cs
- LiteralSubsegment.cs
- ByteViewer.cs
- ConnectionStringsExpressionEditor.cs
- DataGridRelationshipRow.cs
- DispatchOperationRuntime.cs
- HttpStreamXmlDictionaryWriter.cs
- TableFieldsEditor.cs
- Assert.cs
- AdapterDictionary.cs
- CodeDomSerializerException.cs
- SystemKeyConverter.cs
- EditorPart.cs
- CompilerCollection.cs
- ConfigErrorGlyph.cs
- UserPreferenceChangedEventArgs.cs
- XsdDateTime.cs
- FtpRequestCacheValidator.cs
- CodeIterationStatement.cs
- HttpApplicationFactory.cs
- SaveCardRequest.cs
- EventSchemaTraceListener.cs
- InkCanvasSelection.cs
- GetCardDetailsRequest.cs
- WindowsContainer.cs
- RequestValidator.cs
- ExpandSegment.cs
- XmlCountingReader.cs
- GacUtil.cs
- ThreadAbortException.cs
- TreeNodeStyleCollection.cs
- InvalidOperationException.cs
- MaskedTextBox.cs
- SimpleRecyclingCache.cs
- MsmqIntegrationSecurity.cs
- PeerTransportBindingElement.cs
- SerializationHelper.cs
- IntranetCredentialPolicy.cs
- ContentWrapperAttribute.cs
- MultitargetUtil.cs
- TextWriterTraceListener.cs
- ConfigurationFileMap.cs
- ToolStripDropDownMenu.cs
- ListCommandEventArgs.cs
- RectangleGeometry.cs
- PieceNameHelper.cs
- UserControl.cs
- ReflectionUtil.cs
- PointAnimationBase.cs
- XmlNavigatorFilter.cs
- CodePropertyReferenceExpression.cs
- BrowserCapabilitiesFactoryBase.cs
- StylusPlugInCollection.cs
- AuthorizationPolicyTypeElement.cs
- Grant.cs
- Semaphore.cs
- MenuBindingsEditorForm.cs
- AdapterUtil.cs
- SmiRecordBuffer.cs
- KoreanCalendar.cs
- RegexWorker.cs
- LayoutExceptionEventArgs.cs
- WindowsFormsHostPropertyMap.cs
- MailHeaderInfo.cs
- RepeaterItemCollection.cs
- MethodRental.cs
- PLINQETWProvider.cs
- PropertyInfoSet.cs
- QuestionEventArgs.cs
- DropAnimation.xaml.cs
- CompensateDesigner.cs
- TemplateControlParser.cs
- OleDbCommandBuilder.cs
- _ListenerResponseStream.cs
- CodeIndexerExpression.cs
- WindowsMenu.cs
- ColorIndependentAnimationStorage.cs
- SwitchAttribute.cs
- ZipFileInfoCollection.cs
- BinaryObjectWriter.cs
- WpfWebRequestHelper.cs
- ImageAnimator.cs
- DataSourceIDConverter.cs
- SigningCredentials.cs
- Effect.cs
- ToolStripButton.cs
- PreservationFileWriter.cs
- DbConnectionOptions.cs
- AdRotator.cs