From f9d70e601c944d8fd1b060a3923f3d1852a8ce2e Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Thu, 10 Dec 2015 12:21:20 -0800 Subject: [PATCH] Set error before changing state in SocketInput.AbortAwaiting - This fixes a tight race where awaiting code might continue but not see the ODE that moved SocketInput into the completed state. --- src/Microsoft.AspNet.Server.Kestrel/Http/SocketInput.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.AspNet.Server.Kestrel/Http/SocketInput.cs b/src/Microsoft.AspNet.Server.Kestrel/Http/SocketInput.cs index 02bb7a8f0d..5a7a1715d7 100644 --- a/src/Microsoft.AspNet.Server.Kestrel/Http/SocketInput.cs +++ b/src/Microsoft.AspNet.Server.Kestrel/Http/SocketInput.cs @@ -180,11 +180,12 @@ namespace Microsoft.AspNet.Server.Kestrel.Http public void AbortAwaiting() { + _awaitableError = new ObjectDisposedException(nameof(SocketInput), "The request was aborted"); + var awaitableState = Interlocked.Exchange( ref _awaitableState, _awaitableIsCompleted); - _awaitableError = new ObjectDisposedException(nameof(SocketInput), "The request was aborted"); _manualResetEvent.Set(); if (awaitableState != _awaitableIsCompleted &&