diff options
author | Michael Lumish <mlumish@google.com> | 2015-12-15 09:33:48 -0800 |
---|---|---|
committer | Michael Lumish <mlumish@google.com> | 2015-12-15 09:33:48 -0800 |
commit | 88fefe9a482c2bf5700187749aedaebec77769b6 (patch) | |
tree | 175246961d5d31d48e1e4b18fa2daeecd73c5752 /src | |
parent | b4d93b511a0c1aff4974c84bbb2a5e8eb198b903 (diff) | |
parent | d63b1d62b13914462cfee7ed6137395179e66eb0 (diff) |
Merge pull request #4436 from jtattermusch/csharp_shutdown_test
Fix server.KillAsync() and improve abandoned call test
Diffstat (limited to 'src')
-rw-r--r-- | src/csharp/Grpc.Core.Tests/ShutdownTest.cs | 11 | ||||
-rw-r--r-- | src/csharp/Grpc.Core/Server.cs | 2 |
2 files changed, 9 insertions, 4 deletions
diff --git a/src/csharp/Grpc.Core.Tests/ShutdownTest.cs b/src/csharp/Grpc.Core.Tests/ShutdownTest.cs index a2be7ddd5e..10d666d109 100644 --- a/src/csharp/Grpc.Core.Tests/ShutdownTest.cs +++ b/src/csharp/Grpc.Core.Tests/ShutdownTest.cs @@ -61,17 +61,20 @@ namespace Grpc.Core.Tests } [Test] - public async Task AbandonedCall() + public async Task AbandonedCall_ServerKillAsync() { + var readyToShutdown = new TaskCompletionSource<object>(); helper.DuplexStreamingHandler = new DuplexStreamingServerMethod<string, string>(async (requestStream, responseStream, context) => { + readyToShutdown.SetResult(null); await requestStream.ToListAsync(); }); - var call = Calls.AsyncDuplexStreamingCall(helper.CreateDuplexStreamingCall(new CallOptions(deadline: DateTime.UtcNow.AddMilliseconds(1)))); + var call = Calls.AsyncDuplexStreamingCall(helper.CreateDuplexStreamingCall()); + await readyToShutdown.Task; // make sure handler is running - channel.ShutdownAsync().Wait(); - server.ShutdownAsync().Wait(); + await channel.ShutdownAsync(); // channel.ShutdownAsync() works even if there's a pending call. + await server.KillAsync(); // server.ShutdownAsync() would hang waiting for the call to finish. } } } diff --git a/src/csharp/Grpc.Core/Server.cs b/src/csharp/Grpc.Core/Server.cs index 0fadabe554..d120f95fdf 100644 --- a/src/csharp/Grpc.Core/Server.cs +++ b/src/csharp/Grpc.Core/Server.cs @@ -171,6 +171,8 @@ namespace Grpc.Core handle.CancelAllCalls(); await shutdownTcs.Task.ConfigureAwait(false); DisposeHandle(); + + await Task.Run(() => GrpcEnvironment.Release()).ConfigureAwait(false); } internal void AddCallReference(object call) |