prevent race between grpcsharp_server_request_call and grpc_completion_queue_shutdown

pull/7023/head
Jan Tattermusch 9 years ago
parent d605b63383
commit 51d4f01949
  1. 9
      src/csharp/Grpc.Core/Internal/ServerSafeHandle.cs

@ -53,9 +53,12 @@ namespace Grpc.Core.Internal
}
public void RegisterCompletionQueue(CompletionQueueSafeHandle cq)
{
using (cq.NewScope())
{
Native.grpcsharp_server_register_completion_queue(this, cq);
}
}
public int AddInsecurePort(string addr)
{
@ -73,18 +76,24 @@ namespace Grpc.Core.Internal
}
public void ShutdownAndNotify(BatchCompletionDelegate callback, CompletionQueueSafeHandle completionQueue)
{
using (completionQueue.NewScope())
{
var ctx = BatchContextSafeHandle.Create();
completionQueue.CompletionRegistry.RegisterBatchCompletion(ctx, callback);
Native.grpcsharp_server_shutdown_and_notify_callback(this, completionQueue, ctx);
}
}
public void RequestCall(BatchCompletionDelegate callback, CompletionQueueSafeHandle completionQueue)
{
using (completionQueue.NewScope())
{
var ctx = BatchContextSafeHandle.Create();
completionQueue.CompletionRegistry.RegisterBatchCompletion(ctx, callback);
Native.grpcsharp_server_request_call(this, completionQueue, ctx).CheckOk();
}
}
protected override bool ReleaseHandle()
{

Loading…
Cancel
Save