Пример #1
0
        public JvmNativeEnvironment AttachCurrentThread(ref JavaVMAttachArgs args, jvmtiVersion toolsVersion)
        {
            JniInvokeInterface jniInvokeInterface = GetRawInterface();

            JNIEnvHandle env;
            int          result = jniInvokeInterface.AttachCurrentThread(this, out env, ref args);

            return(GetEnvironment(toolsVersion).GetNativeFunctionTable(env));
        }
Пример #2
0
        public int AttachCurrentThreadAsDaemon(JvmtiEnvironment environment, out JniEnvironment nativeEnvironment, bool agentThread)
        {
            JavaVMAttachArgs args = new JavaVMAttachArgs(jniVersion.Version1_6, IntPtr.Zero, jthreadGroup.Null);

            bool alreadyAgent = IsAgentThread.Value;

            if (agentThread && !alreadyAgent)
            {
                IsAgentThread.Value = true;
            }

            JNIEnvHandle jniEnv;
            int          error = RawInterface.AttachCurrentThreadAsDaemon(this, out jniEnv, ref args);

            if (error == 0)
            {
                bool created;
                nativeEnvironment = JniEnvironment.GetOrCreateInstance(jniEnv, out created);
                if (agentThread && !alreadyAgent)
                {
                    if (environment == null)
                    {
                        GetEnvironment(out environment);
                    }

                    jthread thread;
                    JvmtiErrorHandler.ThrowOnFailure(environment.RawInterface.GetCurrentThread(environment, out thread));
                    if (thread != jthread.Null)
                    {
                        ThreadId threadId = TrackLocalThreadReference(thread, environment, nativeEnvironment, true);
                        lock (_agentThreads)
                        {
                            _agentThreads.Add(threadId);
                        }
                    }
                }
            }
            else
            {
                nativeEnvironment = null;
            }

            return(error);
        }