]> git.deb.at Git - rhonda/impostor.git/commitdiff
Fix stack overflow on CTRL+C
authorAeonLucid <aeonlucid@outlook.com>
Sun, 1 Nov 2020 19:26:19 +0000 (20:26 +0100)
committerAeonLucid <aeonlucid@outlook.com>
Sun, 1 Nov 2020 19:26:19 +0000 (20:26 +0100)
src/Impostor.Benchmarks/Tests/MessageReaderBenchmark.cs
src/Impostor.Hazel/MessageReader.cs
src/Impostor.Hazel/MessageReaderPolicy.cs
src/Impostor.Hazel/Udp/UdpConnection.cs

index c8ad2287228c6f1656f34e74a67737d3239363a5..abf16428b55012fa047c36590856d4f6455585d2 100644 (file)
@@ -14,7 +14,7 @@ namespace Impostor.Benchmarks.Tests
     public class MessageReaderBenchmark
     {
         private byte[] _data;
-        private Microsoft.Extensions.ObjectPool.ObjectPool<MessageReader_Bytes_Pooled_Improved> _pool;
+        private ObjectPool<MessageReader_Bytes_Pooled_Improved> _pool;
 
         [GlobalSetup]
         public void Setup()
@@ -45,7 +45,7 @@ namespace Impostor.Benchmarks.Tests
 
             _pool = services
                 .BuildServiceProvider()
-                .GetRequiredService<Microsoft.Extensions.ObjectPool.ObjectPool<MessageReader_Bytes_Pooled_Improved>>();
+                .GetRequiredService<ObjectPool<MessageReader_Bytes_Pooled_Improved>>();
         }
 
         [Benchmark]
index df6d014d8da293b49a3abd692973e50f71d469ab..ab6aea88b8da616dded433852ca69f1526a2b478 100644 (file)
@@ -10,6 +10,7 @@ namespace Impostor.Hazel
     public class MessageReader : IMessageReader
     {
         private readonly ObjectPool<MessageReader> _pool;
+        private bool _inUse;
 
         public byte Tag { get; private set; }
         public ReadOnlyMemory<byte> Buffer { get; private set; }
@@ -28,6 +29,8 @@ namespace Impostor.Hazel
 
         public void Update(byte tag, ReadOnlyMemory<byte> buffer)
         {
+            _inUse = true;
+
             Tag = tag;
             Buffer = buffer;
             Position = 0;
@@ -35,6 +38,8 @@ namespace Impostor.Hazel
 
         internal void Reset()
         {
+            _inUse = false;
+
             Tag = byte.MaxValue;
             Buffer = null;
             Position = 0;
@@ -185,7 +190,10 @@ namespace Impostor.Hazel
 
         public void Dispose()
         {
-            _pool.Return(this);
+            if (_inUse)
+            {
+                _pool.Return(this);
+            }
         }
     }
 }
index 995ad7855c1e5481467ce8272cca460e84764ece..ef3939a486dedad5f59bfcb20d45f13809722e80 100644 (file)
@@ -15,7 +15,7 @@ namespace Impostor.Hazel
 
         public MessageReader Create()
         {
-            return new MessageReader(_serviceProvider.GetRequiredService<Microsoft.Extensions.ObjectPool.ObjectPool<MessageReader>>());
+            return new MessageReader(_serviceProvider.GetRequiredService<ObjectPool<MessageReader>>());
         }
 
         public bool Return(MessageReader obj)
index 4fffb305a917ecaadfafe5770b44d33222a59377..46ad3760b212f4b8c6726e5b39525dbb4aa6dd29 100644 (file)
@@ -3,6 +3,7 @@ using System.Threading;
 using System.Threading.Channels;
 using System.Threading.Tasks;
 using Impostor.Api.Net.Messages;
+using Microsoft.Extensions.ObjectPool;
 using Serilog;
 
 namespace Impostor.Hazel.Udp
@@ -17,14 +18,14 @@ namespace Impostor.Hazel.Udp
 
         private static readonly ILogger Logger = Log.ForContext<UdpConnection>();
         private readonly ConnectionListener _listener;
-        private readonly Microsoft.Extensions.ObjectPool.ObjectPool<MessageReader> _readerPool;
+        private readonly ObjectPool<MessageReader> _readerPool;
         private readonly CancellationTokenSource _stoppingCts;
 
         private bool _isDisposing;
         private bool _isFirst = true;
         private Task _executingTask;
 
-        protected UdpConnection(ConnectionListener listener, Microsoft.Extensions.ObjectPool.ObjectPool<MessageReader> readerPool)
+        protected UdpConnection(ConnectionListener listener, ObjectPool<MessageReader> readerPool)
         {
             _listener = listener;
             _readerPool = readerPool;