コード例 #1
0
ファイル: MemoryTests.cs プロジェクト: nekresh/corefxlab
        public unsafe void PinnedArrayMemoryLifetime()
        {
            Memory <byte> copyStoredForLater;
            var           bytes = new byte[1024];

            fixed(byte *pBytes = bytes)
            {
                using (var owner = new OwnedPinnedArray <byte>(bytes, pBytes)) {
                    Memory <byte> memory      = owner.Memory;
                    Memory <byte> memorySlice = memory.Slice(10);
                    copyStoredForLater = memorySlice;
                    using (memorySlice.Reserve()) {
                        Assert.Throws <InvalidOperationException>(() => { // memory is reserved; cannot dispose
                            owner.Dispose();
                        });
                        Span <byte> span = memorySlice.Span;
                        span[0] = 255;
                    }
                }
            }

            Assert.Throws <ObjectDisposedException>(() => { // manager is disposed
                var span = copyStoredForLater.Span;
            });
        }
コード例 #2
0
ファイル: MemoryTests.cs プロジェクト: tmds/corefxlab
        public unsafe void PinnedArrayMemoryLifetime()
        {
            Memory <byte> copyStoredForLater;
            var           bytes = new byte[1024];

            fixed(byte *pBytes = bytes)
            {
                var owner = new OwnedPinnedArray <byte>(bytes, pBytes);

                try {
                    Memory <byte> memory      = owner.Memory;
                    Memory <byte> memorySlice = memory.Slice(10);
                    copyStoredForLater = memorySlice;
                    var r = memorySlice.Reserve();
                    try {
                        Assert.Throws <InvalidOperationException>(() => { // memory is reserved; cannot dispose
                            owner.Dispose();
                        });
                        Assert.Throws <ObjectDisposedException>(() => {
                            Span <byte> span = memorySlice.Span;
                            span[0]          = 255;
                        });
                    }
                    finally {
                        Assert.Throws <ObjectDisposedException>(() => {
                            // memory has been Disposed, so cannot free reservation
                            r.Dispose();
                        });
                    }
                }
                finally {
                    Assert.Throws <InvalidOperationException>(() => {
                        // memory is still reserved as Release failed.
                        owner.Dispose();
                    });
                }
            }

            Assert.Throws <ObjectDisposedException>(() => { // manager is disposed
                var span = copyStoredForLater.Span;
            });
        }
コード例 #3
0
ファイル: MemoryTests.cs プロジェクト: jkotas/corefxlab
 public unsafe void PinnedArrayMemoryLifetime()
 {
     Memory<byte> copyStoredForLater;
     var bytes = new byte[1024];
     fixed (byte* pBytes = bytes) {
         using (var owner = new OwnedPinnedArray<byte>(bytes, pBytes)) {
             Memory<byte> memory = owner.Memory;
             Memory<byte> memorySlice = memory.Slice(10);
             copyStoredForLater = memorySlice;
             using (memorySlice.Reserve()) {
                 Assert.Throws<InvalidOperationException>(() => { // memory is reserved; cannot dispose
                     owner.Dispose();
                 }); 
                 Span<byte> span = memorySlice.Span;
                 span[0] = 255;
             }
         }   
     }
     Assert.Throws<ObjectDisposedException>(() => { // manager is disposed
         var span = copyStoredForLater.Span;
     });
 }