Example #1
0
        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;
            });
        }
Example #2
0
        public unsafe void PinnedArrayMemoryLifetime()
        {
            var bytes = new byte[1024];

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

                TestLifetime(owner);
            }
        }
Example #3
0
        static void RunLoop(bool log)
        {
            var loop = new UVLoop();

            var listener = new TcpListener(s_ipAddress, s_port, loop);

            listener.ConnectionAccepted += (Tcp connection) =>
            {
                if (log)
                {
                    Console.WriteLine("connection accepted");
                }

                connection.ReadCompleted += (data) =>
                {
                    if (log)
                    {
                        unsafe
                        {
                            var requestString = new Utf8String(data.Span);
                            Console.WriteLine("*REQUEST:\n {0}", requestString.ToString());
                        }
                    }

                    var formatter = new ArrayFormatter(512, TextEncoder.Utf8);
                    formatter.Clear();
                    formatter.Append("HTTP/1.1 200 OK");
                    formatter.Append("\r\n\r\n");
                    formatter.Append("Hello World!");
                    if (log)
                    {
                        formatter.Format(" @ {0:O}", DateTime.UtcNow);
                    }

                    var segment = formatter.Formatted;
                    using (var memory = new OwnedPinnedArray <byte>(segment.Array)) {
                        connection.TryWrite(memory.Memory.Slice(segment.Offset, segment.Count));
                        connection.Dispose();
                    }
                };

                connection.ReadStart();
            };

            listener.Listen();
            loop.Run();
        }
Example #4
0
        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;
            });
        }
Example #5
0
 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;
     });
 }   
Example #6
0
        static void RunLoop(bool log)
        {
            var loop = new UVLoop();

            var listener = new TcpListener(s_ipAddress, s_port, loop);

            listener.ConnectionAccepted += (Tcp connection) =>
            {
                if (log)
                {
                    Console.WriteLine("connection accepted");
                }

                connection.ReadCompleted += (data) =>
                {
                    if (log)
                    {
                        unsafe
                        {
                            var requestString = new Utf8String(data.Span);
                            Console.WriteLine("*REQUEST:\n {0}", requestString.ToString());
                        }
                    }

                    var formatter = new ArrayFormatter(512, EncodingData.InvariantUtf8);
                    formatter.Clear();
                    formatter.Append("HTTP/1.1 200 OK");
                    formatter.Append("\r\n\r\n");
                    formatter.Append("Hello World!");
                    if (log)
                    {
                        formatter.Format(" @ {0:O}", DateTime.UtcNow);
                    }

                    var segment = formatter.Formatted;
                    using (var memory = new OwnedPinnedArray<byte>(segment.Array)) {
                        connection.TryWrite(memory.Memory.Slice(segment.Offset, segment.Count));
                        connection.Dispose();
                    }
                };

                connection.ReadStart();
            };

            listener.Listen();
            loop.Run();
        }