public void NativeMemoryLifetime() { Memory <byte> copyStoredForLater; var owner = new OwnedNativeMemory(1024); 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>(() => { // memory is disposed Span <byte> span = memorySlice.Span; span[0] = 255; }); } finally { Assert.Throws <ObjectDisposedException>(() => { // memory is disposed 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; }); }
public void NativeMemoryLifetime() { Memory<byte> copyStoredForLater; using (var owner = new OwnedNativeMemory(1024)) { 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; }); }
public void NativeMemoryLifetime() { Memory <byte> copyStoredForLater; using (var owner = new OwnedNativeMemory(1024)) { 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; }); }