in jvmti-access/src/main/jni/ElasticJvmtiAgent.cpp [23:41]
ReturnCode init(JNIEnv* jniEnv) {
if(jvmti != nullptr) {
return raiseExceptionAndReturn(jniEnv, ReturnCode::ERROR, "JVMTI environment is already initialized!");
}
JavaVM* vm;
auto vmError = jniEnv->GetJavaVM(&vm);
if(vmError != JNI_OK) {
return raiseExceptionAndReturn(jniEnv, ReturnCode::ERROR, "jniEnv->GetJavaVM() failed, return code is ", vmError);
}
auto getEnvErr = vm->GetEnv(reinterpret_cast<void**>(&jvmti), JVMTI_VERSION_21);
if(getEnvErr == JNI_EVERSION) {
getEnvErr = vm->GetEnv(reinterpret_cast<void**>(&jvmti), JVMTI_VERSION_1_2);
}
if(getEnvErr != JNI_OK) {
return raiseExceptionAndReturn(jniEnv, ReturnCode::ERROR, "JavaVM->GetEnv() failed, return code is ", getEnvErr);
}
return virtualThreads.init(jniEnv, jvmti);
}