summaryrefslogtreecommitdiff
path: root/lib/netstd
diff options
context:
space:
mode:
authorJens Geyer <jensg@apache.org>2021-04-15 16:48:21 +0200
committerJens Geyer <jensg@apache.org>2021-04-15 19:05:24 +0200
commitd4e1eb98525faffafdba4f36f44e3e7382cc0fd0 (patch)
treeb23eae2e77e7ab52030e9ec1bd3d1cfa0307454d /lib/netstd
parent430e540ef99b2072125897ff6a666b9ec679926f (diff)
downloadthrift-d4e1eb98525faffafdba4f36f44e3e7382cc0fd0.tar.gz
THRIFT-5398 ThreadPoolServer not stoppable via CancellationToken
Client: netstd Patch: Jens Geyer This closes #2376
Diffstat (limited to 'lib/netstd')
-rw-r--r--lib/netstd/Thrift/Server/TThreadPoolAsyncServer.cs8
-rw-r--r--lib/netstd/Thrift/Transport/Server/TNamedPipeServerTransport.cs5
-rw-r--r--lib/netstd/Thrift/Transport/Server/TServerTransport.cs14
3 files changed, 12 insertions, 15 deletions
diff --git a/lib/netstd/Thrift/Server/TThreadPoolAsyncServer.cs b/lib/netstd/Thrift/Server/TThreadPoolAsyncServer.cs
index 20e659d3a..877d595e6 100644
--- a/lib/netstd/Thrift/Server/TThreadPoolAsyncServer.cs
+++ b/lib/netstd/Thrift/Server/TThreadPoolAsyncServer.cs
@@ -172,19 +172,21 @@ namespace Thrift.Server
if (ServerEventHandler != null)
await ServerEventHandler.PreServeAsync(cancellationToken);
- while (!stop)
+ while (!(stop || ServerCancellationToken.IsCancellationRequested))
{
- int failureCount = 0;
try
{
TTransport client = await ServerTransport.AcceptAsync(cancellationToken);
ThreadPool.QueueUserWorkItem(this.Execute, client);
}
+ catch (TaskCanceledException)
+ {
+ stop = true;
+ }
catch (TTransportException ttx)
{
if (!stop || ttx.Type != TTransportException.ExceptionType.Interrupted)
{
- ++failureCount;
LogError(ttx.ToString());
}
diff --git a/lib/netstd/Thrift/Transport/Server/TNamedPipeServerTransport.cs b/lib/netstd/Thrift/Transport/Server/TNamedPipeServerTransport.cs
index 307b7f8a1..35a037da7 100644
--- a/lib/netstd/Thrift/Transport/Server/TNamedPipeServerTransport.cs
+++ b/lib/netstd/Thrift/Transport/Server/TNamedPipeServerTransport.cs
@@ -264,6 +264,11 @@ namespace Thrift.Transport.Server
Close();
throw;
}
+ catch (TaskCanceledException)
+ {
+ Close();
+ throw; // let it bubble up
+ }
catch (Exception e)
{
Close();
diff --git a/lib/netstd/Thrift/Transport/Server/TServerTransport.cs b/lib/netstd/Thrift/Transport/Server/TServerTransport.cs
index eee50fb5a..5366114b0 100644
--- a/lib/netstd/Thrift/Transport/Server/TServerTransport.cs
+++ b/lib/netstd/Thrift/Transport/Server/TServerTransport.cs
@@ -36,19 +36,9 @@ namespace Thrift.Transport
public abstract void Close();
public abstract bool IsClientPending();
- protected virtual async ValueTask<TTransport> AcceptImplementationAsync()
- {
- return await AcceptImplementationAsync(CancellationToken.None);
- }
-
- protected abstract ValueTask<TTransport> AcceptImplementationAsync(CancellationToken cancellationToken);
-
- public async ValueTask<TTransport> AcceptAsync()
- {
- return await AcceptAsync(CancellationToken.None);
- }
+ protected abstract ValueTask<TTransport> AcceptImplementationAsync(CancellationToken cancellationToken = default);
- public async ValueTask<TTransport> AcceptAsync(CancellationToken cancellationToken)
+ public async ValueTask<TTransport> AcceptAsync(CancellationToken cancellationToken = default)
{
var transport = await AcceptImplementationAsync(cancellationToken);