/// <summary> /// Initializes a new instance of the <see cref="_instance"/> class. /// </summary> private Jvm(IntPtr jvmPtr) { Debug.Assert(jvmPtr != IntPtr.Zero); _jvmPtr = jvmPtr; var funcPtr = (JvmInterface **)jvmPtr; var func = **funcPtr; GetDelegate(func.AttachCurrentThread, out _attachCurrentThread); // JVM is a singleton, so this is one-time subscription. // This is a shortcut - we pass DetachCurrentThread pointer directly as a thread exit callback, // because signatures happen to match exactly. _threadExitCallbackId = UnmanagedThread.SetThreadExitCallback(func.DetachCurrentThread); var env = AttachCurrentThread(); _methodId = new MethodId(env); // Keep AppDomain check here to avoid JITting GetCallbacksFromDefaultDomain method on .NET Core // (which fails due to _AppDomain usage). _callbacks = AppDomain.CurrentDomain.IsDefaultAppDomain() ? new Callbacks(env, this) : GetCallbacksFromDefaultDomain(); }
/// <summary> /// Initializes a new instance of the <see cref="_instance"/> class. /// </summary> private Jvm(IntPtr jvmPtr) { Debug.Assert(jvmPtr != IntPtr.Zero); _jvmPtr = jvmPtr; var funcPtr = (JvmInterface **)jvmPtr; var func = **funcPtr; GetDelegate(func.AttachCurrentThread, out _attachCurrentThread); var env = AttachCurrentThread(); _methodId = new MethodId(env); _callbacks = GetCallbacks(env, this); }
/// <summary> /// Initializes a new instance of the <see cref="_instance"/> class. /// </summary> private Jvm(IntPtr jvmPtr) { Debug.Assert(jvmPtr != IntPtr.Zero); _jvmPtr = jvmPtr; var funcPtr = (JvmInterface **)jvmPtr; var func = **funcPtr; GetDelegate(func.AttachCurrentThread, out _attachCurrentThread); var env = AttachCurrentThread(); _methodId = new MethodId(env); // Keep AppDomain check here to avoid JITting GetCallbacksFromDefaultDomain method on .NET Core // (which fails due to _AppDomain usage). _callbacks = AppDomain.CurrentDomain.IsDefaultAppDomain() ? new Callbacks(env, this) : GetCallbacksFromDefaultDomain(); }