summaryrefslogtreecommitdiff
path: root/src/mscorlib/src/System/IO/PinnedBufferMemoryStream.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/mscorlib/src/System/IO/PinnedBufferMemoryStream.cs')
-rw-r--r--src/mscorlib/src/System/IO/PinnedBufferMemoryStream.cs76
1 files changed, 0 insertions, 76 deletions
diff --git a/src/mscorlib/src/System/IO/PinnedBufferMemoryStream.cs b/src/mscorlib/src/System/IO/PinnedBufferMemoryStream.cs
deleted file mode 100644
index 284cd92..0000000
--- a/src/mscorlib/src/System/IO/PinnedBufferMemoryStream.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-/*============================================================
-**
-**
-**
-**
-**
-** Purpose: Pins a byte[], exposing it as an unmanaged memory
-** stream. Used in ResourceReader for corner cases.
-**
-**
-===========================================================*/
-
-using System;
-using System.Runtime.InteropServices;
-using System.Diagnostics;
-using System.Diagnostics.Contracts;
-
-namespace System.IO
-{
- internal sealed unsafe class PinnedBufferMemoryStream : UnmanagedMemoryStream
- {
- private byte[] _array;
- private GCHandle _pinningHandle;
-
- // The new inheritance model requires a Critical default ctor since base (UnmanagedMemoryStream) has one
- private PinnedBufferMemoryStream() : base() { }
-
- internal PinnedBufferMemoryStream(byte[] array)
- {
- Debug.Assert(array != null, "Array can't be null");
-
- int len = array.Length;
- // Handle 0 length byte arrays specially.
- if (len == 0)
- {
- array = new byte[1];
- len = 0;
- }
-
- _array = array;
- _pinningHandle = new GCHandle(array, GCHandleType.Pinned);
- // Now the byte[] is pinned for the lifetime of this instance.
- // But I also need to get a pointer to that block of memory...
- fixed (byte* ptr = &_array[0])
- Initialize(ptr, len, len, FileAccess.Read);
- }
-
- ~PinnedBufferMemoryStream()
- {
- Dispose(false);
- }
-
- protected override void Dispose(bool disposing)
- {
- if (_isOpen)
- {
- _pinningHandle.Free();
- _isOpen = false;
- }
-#if _DEBUG
- // To help track down lifetime issues on checked builds, force
- //a full GC here.
- if (disposing)
- {
- GC.Collect();
- GC.WaitForPendingFinalizers();
- }
-#endif
- base.Dispose(disposing);
- }
- }
-}