Skip to content

Commit

Permalink
JVM_GetVmArguments add vm access
Browse files Browse the repository at this point in the history
JVM_GetVmArguments implementation is missing vm access for internal methods

see #2975

Signed-off-by: Theresa Mammarella <Theresa.T.Mammarella@ibm.com>
  • Loading branch information
theresa-m committed Oct 12, 2018
1 parent 1bda20b commit fcf4eaf
Showing 1 changed file with 27 additions and 14 deletions.
41 changes: 27 additions & 14 deletions runtime/j9vm/java11vmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1458,28 +1458,41 @@ JVM_GetVmArguments(JNIEnv *env) {
J9VMThread* currentThread = (J9VMThread*)env;
J9JavaVM* vm = currentThread->javaVM;
J9InternalVMFunctions* internalFunctions = vm->internalVMFunctions;
jclass vmJniClass = NULL;
jobjectArray result = NULL;
J9Class* vmClass = J9VMCOMIBMOTIVMVM_OR_NULL(vm);
J9Class* vmClass = NULL;

if (NULL == vmClass) {
internalFunctions->setCurrentException(currentThread, J9VMCONSTANTPOOL_JAVALANGINTERNALERROR, NULL);
} else {
jclass vmJniClass = NULL;
jmethodID mid = NULL;
internalFunctions->internalEnterVMFromJNI(currentThread);

vmJniClass = (jclass)internalFunctions->j9jni_createLocalRef(env, vmClass->classObject);
vmClass = J9VMCOMIBMOTIVMVM_OR_NULL(vm);

mid = (*env)->GetStaticMethodID(env, vmJniClass, "getVMArgs", "()[Ljava/lang/String;");
if (NULL == mid) {
internalFunctions->setCurrentException(currentThread, J9VMCONSTANTPOOL_JAVALANGINTERNALERROR, NULL);
} else {
result = (jobjectArray)((*env)->CallObjectMethod(env, vmJniClass, mid));
if (NULL != vmClass) {
J9Method* method = internalFunctions->findJNIMethod(currentThread, vmClass, "getVMArgs", "()[Ljava/lang/String;");

if (NULL != method) {
jmethodID mid = (jmethodID)internalFunctions->getJNIMethodID(currentThread, method);

if (NULL != mid) {
jclass vmJniClass = (jclass)internalFunctions->j9jni_createLocalRef(env, vmClass->classObject);

if (NULL != vmJniClass) {
/* exit vm before calling jni method */
internalFunctions->internalExitVMToJNI(currentThread);

result = (jobjectArray)((*env)->CallObjectMethod(env, vmJniClass, mid));

internalFunctions->internalEnterVMFromJNI(currentThread);
internalFunctions->j9jni_deleteLocalRef(env, (jobject)vmJniClass);
goto success;
}
}
}

internalFunctions->j9jni_deleteLocalRef(env, (jobject)vmJniClass);
}
/* if code reaches here, something went wrong */
internalFunctions->setCurrentException(currentThread, J9VMCONSTANTPOOL_JAVALANGINTERNALERROR, NULL);

success:
internalFunctions->internalExitVMToJNI(currentThread);
return result;
}

Expand Down

0 comments on commit fcf4eaf

Please sign in to comment.