More shutdown tweaks (#1760)
* More shutdown tweaks - Added assert if loop has ended before starting the shutdown sequence.
This commit is contained in:
parent
7122b6c4aa
commit
9a5d6c8879
|
|
@ -98,39 +98,35 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Internal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_threadTcs.Task.IsCompleted)
|
Debug.Assert(!_threadTcs.Task.IsCompleted, "The loop thread was completed before calling uv_unref on the post handle.");
|
||||||
{
|
|
||||||
var stepTimeout = TimeSpan.FromTicks(timeout.Ticks / 3);
|
|
||||||
|
|
||||||
try
|
var stepTimeout = TimeSpan.FromTicks(timeout.Ticks / 3);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Post(t => t.AllowStop());
|
||||||
|
if (!await WaitAsync(_threadTcs.Task, stepTimeout).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
Post(t => t.AllowStop());
|
Post(t => t.OnStopRude());
|
||||||
if (!await WaitAsync(_threadTcs.Task, stepTimeout).ConfigureAwait(false))
|
if (!await WaitAsync(_threadTcs.Task, stepTimeout).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
Post(t => t.OnStopRude());
|
Post(t => t.OnStopImmediate());
|
||||||
if (!await WaitAsync(_threadTcs.Task, stepTimeout).ConfigureAwait(false))
|
if (!await WaitAsync(_threadTcs.Task, stepTimeout).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
Post(t => t.OnStopImmediate());
|
_log.LogCritical($"{nameof(LibuvThread)}.{nameof(StopAsync)} failed to terminate libuv thread.");
|
||||||
if (!await WaitAsync(_threadTcs.Task, stepTimeout).ConfigureAwait(false))
|
|
||||||
{
|
|
||||||
_log.LogCritical($"{nameof(LibuvThread)}.{nameof(StopAsync)} failed to terminate libuv thread.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (ObjectDisposedException)
|
}
|
||||||
|
catch (ObjectDisposedException)
|
||||||
|
{
|
||||||
|
if (!await WaitAsync(_threadTcs.Task, stepTimeout).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
if (!await WaitAsync(_threadTcs.Task, stepTimeout).ConfigureAwait(false))
|
_log.LogCritical($"{nameof(LibuvThread)}.{nameof(StopAsync)} failed to terminate libuv thread.");
|
||||||
{
|
|
||||||
_log.LogCritical($"{nameof(LibuvThread)}.{nameof(StopAsync)} failed to terminate libuv thread.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_closeError != null)
|
_closeError?.Throw();
|
||||||
{
|
|
||||||
_closeError.Throw();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue