@@ -43,7 +43,7 @@ public partial class Frame : FrameContext, IFrameControl
4343 private Task _requestProcessingTask ;
4444 private volatile bool _requestProcessingStopping ; // volatile, see: https://msdn.microsoft.com/en-us/library/x13ttww7.aspx
4545 private volatile bool _requestAborted ;
46- private CancellationTokenSource _disconnectOrAbortedCts = new CancellationTokenSource ( ) ;
46+ private CancellationTokenSource _abortedCts ;
4747
4848 private FrameRequestStream _requestBody ;
4949 private FrameResponseStream _responseBody ;
@@ -144,6 +144,9 @@ public void Reset()
144144 }
145145
146146 _prepareRequest ? . Invoke ( this ) ;
147+
148+ _abortedCts ? . Dispose ( ) ;
149+ _abortedCts = null ;
147150 }
148151
149152 public void ResetResponseHeaders ( )
@@ -196,12 +199,17 @@ public void Abort()
196199 ConnectionControl . End ( ProduceEndType . SocketDisconnect ) ;
197200 SocketInput . AbortAwaiting ( ) ;
198201
199- _disconnectOrAbortedCts . Cancel ( ) ;
202+ _abortedCts ? . Cancel ( ) ;
200203 }
201204 catch ( Exception ex )
202205 {
203206 Log . LogError ( "Abort" , ex ) ;
204207 }
208+ finally
209+ {
210+ _abortedCts ? . Dispose ( ) ;
211+ _abortedCts = null ;
212+ }
205213 }
206214
207215 /// <summary>
@@ -245,7 +253,8 @@ public async Task RequestProcessingAsync()
245253 ResponseBody = _responseBody ;
246254 DuplexStream = new FrameDuplexStream ( RequestBody , ResponseBody ) ;
247255
248- RequestAborted = _disconnectOrAbortedCts . Token ;
256+ _abortedCts = new CancellationTokenSource ( ) ;
257+ RequestAborted = _abortedCts . Token ;
249258
250259 var httpContext = HttpContextFactory . Create ( this ) ;
251260 try
@@ -298,7 +307,8 @@ public async Task RequestProcessingAsync()
298307 {
299308 try
300309 {
301- _disconnectOrAbortedCts . Dispose ( ) ;
310+ _abortedCts ? . Dispose ( ) ;
311+ _abortedCts = null ;
302312
303313 // If _requestAborted is set, the connection has already been closed.
304314 if ( ! _requestAborted )
0 commit comments