address interview feedback

pull/18327/head
Jan Tattermusch 6 years ago
parent 1ef8bd0944
commit fa33d47da5
  1. 22
      src/csharp/Grpc.Core/Internal/NativeCallbackDispatcher.cs

@ -24,6 +24,7 @@ using System.Runtime.InteropServices;
using System.Threading;
using System.Collections.Generic;
using Grpc.Core.Logging;
using Grpc.Core.Utils;
namespace Grpc.Core.Internal
{
@ -34,20 +35,14 @@ namespace Grpc.Core.Internal
internal class NativeCallbackDispatcher
{
static readonly ILogger Logger = GrpcEnvironment.Logger.ForType<NativeCallbackDispatcher>();
static readonly object staticLock = new object();
static NativeCallbackDispatcherCallback dispatcherCallback;
public static void Init(NativeMethods native)
{
lock (staticLock)
{
if (dispatcherCallback == null)
{
dispatcherCallback = new NativeCallbackDispatcherCallback(HandleDispatcherCallback);
native.grpcsharp_native_callback_dispatcher_init(dispatcherCallback);
}
}
GrpcPreconditions.CheckState(dispatcherCallback == null);
dispatcherCallback = new NativeCallbackDispatcherCallback(HandleDispatcherCallback);
native.grpcsharp_native_callback_dispatcher_init(dispatcherCallback);
}
public static NativeCallbackRegistration RegisterCallback(UniversalNativeCallback callback)
@ -56,18 +51,13 @@ namespace Grpc.Core.Internal
return new NativeCallbackRegistration(gcHandle);
}
private static UniversalNativeCallback GetCallback(IntPtr tag)
{
var gcHandle = GCHandle.FromIntPtr(tag);
return (UniversalNativeCallback) gcHandle.Target;
}
[MonoPInvokeCallback(typeof(NativeCallbackDispatcherCallback))]
private static int HandleDispatcherCallback(IntPtr tag, IntPtr arg0, IntPtr arg1, IntPtr arg2, IntPtr arg3, IntPtr arg4, IntPtr arg5)
{
try
{
var callback = GetCallback(tag);
var gcHandle = GCHandle.FromIntPtr(tag);
var callback = (UniversalNativeCallback) gcHandle.Target;
return callback(arg0, arg1, arg2, arg3, arg4, arg5);
}
catch (Exception e)

Loading…
Cancel
Save