mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
8249650: Optimize JNIHandle::make_local thread variable usage
Reviewed-by: kbarrett, dcubed, kvn, coleenp, sspitsyn
This commit is contained in:
parent
2a8f92e7e7
commit
73c75ed838
12 changed files with 154 additions and 185 deletions
|
@ -436,11 +436,11 @@ char* java_lang_String::as_platform_dependent_str(Handle java_string, TRAPS) {
|
||||||
char *native_platform_string;
|
char *native_platform_string;
|
||||||
{ JavaThread* thread = (JavaThread*)THREAD;
|
{ JavaThread* thread = (JavaThread*)THREAD;
|
||||||
assert(thread->is_Java_thread(), "must be java thread");
|
assert(thread->is_Java_thread(), "must be java thread");
|
||||||
JNIEnv *env = thread->jni_environment();
|
jstring js = (jstring) JNIHandles::make_local(thread, java_string());
|
||||||
jstring js = (jstring) JNIHandles::make_local(env, java_string());
|
|
||||||
bool is_copy;
|
bool is_copy;
|
||||||
HandleMark hm(thread);
|
HandleMark hm(thread);
|
||||||
ThreadToNativeFromVM ttn(thread);
|
ThreadToNativeFromVM ttn(thread);
|
||||||
|
JNIEnv *env = thread->jni_environment();
|
||||||
native_platform_string = (_to_platform_string_fn)(env, js, &is_copy);
|
native_platform_string = (_to_platform_string_fn)(env, js, &is_copy);
|
||||||
assert(is_copy == JNI_TRUE, "is_copy value changed");
|
assert(is_copy == JNI_TRUE, "is_copy value changed");
|
||||||
JNIHandles::destroy_local(js);
|
JNIHandles::destroy_local(js);
|
||||||
|
@ -2844,10 +2844,10 @@ Method* java_lang_StackFrameInfo::get_method(Handle stackFrame, InstanceKlass* h
|
||||||
void java_lang_StackFrameInfo::set_method_and_bci(Handle stackFrame, const methodHandle& method, int bci, TRAPS) {
|
void java_lang_StackFrameInfo::set_method_and_bci(Handle stackFrame, const methodHandle& method, int bci, TRAPS) {
|
||||||
// set Method* or mid/cpref
|
// set Method* or mid/cpref
|
||||||
HandleMark hm(THREAD);
|
HandleMark hm(THREAD);
|
||||||
Handle mname(Thread::current(), stackFrame->obj_field(_memberName_offset));
|
Handle mname(THREAD, stackFrame->obj_field(_memberName_offset));
|
||||||
InstanceKlass* ik = method->method_holder();
|
InstanceKlass* ik = method->method_holder();
|
||||||
CallInfo info(method(), ik, CHECK);
|
CallInfo info(method(), ik, CHECK);
|
||||||
MethodHandles::init_method_MemberName(mname, info);
|
MethodHandles::init_method_MemberName(mname, info, THREAD);
|
||||||
// set bci
|
// set bci
|
||||||
java_lang_StackFrameInfo::set_bci(stackFrame(), bci);
|
java_lang_StackFrameInfo::set_bci(stackFrame(), bci);
|
||||||
// method may be redefined; store the version
|
// method may be redefined; store the version
|
||||||
|
|
|
@ -296,7 +296,6 @@ bool Verifier::is_eligible_for_verification(InstanceKlass* klass, bool should_ve
|
||||||
Symbol* Verifier::inference_verify(
|
Symbol* Verifier::inference_verify(
|
||||||
InstanceKlass* klass, char* message, size_t message_len, TRAPS) {
|
InstanceKlass* klass, char* message, size_t message_len, TRAPS) {
|
||||||
JavaThread* thread = (JavaThread*)THREAD;
|
JavaThread* thread = (JavaThread*)THREAD;
|
||||||
JNIEnv *env = thread->jni_environment();
|
|
||||||
|
|
||||||
verify_byte_codes_fn_t verify_func = verify_byte_codes_fn();
|
verify_byte_codes_fn_t verify_func = verify_byte_codes_fn();
|
||||||
|
|
||||||
|
@ -305,10 +304,10 @@ Symbol* Verifier::inference_verify(
|
||||||
return vmSymbols::java_lang_VerifyError();
|
return vmSymbols::java_lang_VerifyError();
|
||||||
}
|
}
|
||||||
|
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(thread);
|
||||||
log_info(verification)("Verifying class %s with old format", klass->external_name());
|
log_info(verification)("Verifying class %s with old format", klass->external_name());
|
||||||
|
|
||||||
jclass cls = (jclass) JNIHandles::make_local(env, klass->java_mirror());
|
jclass cls = (jclass) JNIHandles::make_local(thread, klass->java_mirror());
|
||||||
jint result;
|
jint result;
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -316,7 +315,7 @@ Symbol* Verifier::inference_verify(
|
||||||
ThreadToNativeFromVM ttn(thread);
|
ThreadToNativeFromVM ttn(thread);
|
||||||
// ThreadToNativeFromVM takes care of changing thread_state, so safepoint
|
// ThreadToNativeFromVM takes care of changing thread_state, so safepoint
|
||||||
// code knows that we have left the VM
|
// code knows that we have left the VM
|
||||||
|
JNIEnv *env = thread->jni_environment();
|
||||||
result = (*verify_func)(env, cls, message, (int)message_len, klass->major_version());
|
result = (*verify_func)(env, cls, message, (int)message_len, klass->major_version());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -251,7 +251,7 @@ C2V_VMENTRY_NULL(jobject, getObjectAtAddress, (JNIEnv* env, jobject c2vm, jlong
|
||||||
if (obj != NULL) {
|
if (obj != NULL) {
|
||||||
oopDesc::verify(obj);
|
oopDesc::verify(obj);
|
||||||
}
|
}
|
||||||
return JNIHandles::make_local(obj);
|
return JNIHandles::make_local(THREAD, obj);
|
||||||
C2V_END
|
C2V_END
|
||||||
|
|
||||||
C2V_VMENTRY_NULL(jbyteArray, getBytecode, (JNIEnv* env, jobject, jobject jvmci_method))
|
C2V_VMENTRY_NULL(jbyteArray, getBytecode, (JNIEnv* env, jobject, jobject jvmci_method))
|
||||||
|
@ -1038,7 +1038,7 @@ C2V_VMENTRY_NULL(jobject, executeHotSpotNmethod, (JNIEnv* env, jobject, jobject
|
||||||
if (jap.return_type() == T_VOID) {
|
if (jap.return_type() == T_VOID) {
|
||||||
return NULL;
|
return NULL;
|
||||||
} else if (is_reference_type(jap.return_type())) {
|
} else if (is_reference_type(jap.return_type())) {
|
||||||
return JNIHandles::make_local((oop) result.get_jobject());
|
return JNIHandles::make_local(THREAD, (oop) result.get_jobject());
|
||||||
} else {
|
} else {
|
||||||
jvalue *value = (jvalue *) result.get_value_addr();
|
jvalue *value = (jvalue *) result.get_value_addr();
|
||||||
// Narrow the value down if required (Important on big endian machines)
|
// Narrow the value down if required (Important on big endian machines)
|
||||||
|
@ -2314,7 +2314,7 @@ C2V_VMENTRY_NULL(jlongArray, registerNativeMethods, (JNIEnv* env, jobject, jclas
|
||||||
}
|
}
|
||||||
|
|
||||||
typeArrayOop info_oop = oopFactory::new_longArray(4, CHECK_0);
|
typeArrayOop info_oop = oopFactory::new_longArray(4, CHECK_0);
|
||||||
jlongArray info = (jlongArray) JNIHandles::make_local(info_oop);
|
jlongArray info = (jlongArray) JNIHandles::make_local(THREAD, info_oop);
|
||||||
runtime->init_JavaVM_info(info, JVMCI_CHECK_0);
|
runtime->init_JavaVM_info(info, JVMCI_CHECK_0);
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
@ -2565,7 +2565,7 @@ C2V_VMENTRY_NULL(jobject, asReflectionField, (JNIEnv* env, jobject, jobject jvmc
|
||||||
}
|
}
|
||||||
fieldDescriptor fd(iklass, index);
|
fieldDescriptor fd(iklass, index);
|
||||||
oop reflected = Reflection::new_field(&fd, CHECK_NULL);
|
oop reflected = Reflection::new_field(&fd, CHECK_NULL);
|
||||||
return JNIHandles::make_local(env, reflected);
|
return JNIHandles::make_local(THREAD, reflected);
|
||||||
}
|
}
|
||||||
|
|
||||||
C2V_VMENTRY_NULL(jobjectArray, getFailedSpeculations, (JNIEnv* env, jobject, jlong failed_speculations_address, jobjectArray current))
|
C2V_VMENTRY_NULL(jobjectArray, getFailedSpeculations, (JNIEnv* env, jobject, jlong failed_speculations_address, jobjectArray current))
|
||||||
|
|
|
@ -344,8 +344,7 @@ JNI_ENTRY(jclass, jni_DefineClass(JNIEnv *env, const char *name, jobject loaderR
|
||||||
trace_class_resolution(k);
|
trace_class_resolution(k);
|
||||||
}
|
}
|
||||||
|
|
||||||
cls = (jclass)JNIHandles::make_local(
|
cls = (jclass)JNIHandles::make_local(THREAD, k->java_mirror());
|
||||||
env, k->java_mirror());
|
|
||||||
return cls;
|
return cls;
|
||||||
JNI_END
|
JNI_END
|
||||||
|
|
||||||
|
@ -501,7 +500,7 @@ JNI_ENTRY(jobject, jni_ToReflectedMethod(JNIEnv *env, jclass cls, jmethodID meth
|
||||||
} else {
|
} else {
|
||||||
reflection_method = Reflection::new_method(m, false, CHECK_NULL);
|
reflection_method = Reflection::new_method(m, false, CHECK_NULL);
|
||||||
}
|
}
|
||||||
ret = JNIHandles::make_local(env, reflection_method);
|
ret = JNIHandles::make_local(THREAD, reflection_method);
|
||||||
return ret;
|
return ret;
|
||||||
JNI_END
|
JNI_END
|
||||||
|
|
||||||
|
@ -535,7 +534,7 @@ JNI_ENTRY(jclass, jni_GetSuperclass(JNIEnv *env, jclass sub))
|
||||||
: k->super() ) );
|
: k->super() ) );
|
||||||
assert(super == super2,
|
assert(super == super2,
|
||||||
"java_super computation depends on interface, array, other super");
|
"java_super computation depends on interface, array, other super");
|
||||||
obj = (super == NULL) ? NULL : (jclass) JNIHandles::make_local(super->java_mirror());
|
obj = (super == NULL) ? NULL : (jclass) JNIHandles::make_local(THREAD, super->java_mirror());
|
||||||
return obj;
|
return obj;
|
||||||
JNI_END
|
JNI_END
|
||||||
|
|
||||||
|
@ -623,7 +622,7 @@ JNI_ENTRY_NO_PRESERVE(jthrowable, jni_ExceptionOccurred(JNIEnv *env))
|
||||||
|
|
||||||
jni_check_async_exceptions(thread);
|
jni_check_async_exceptions(thread);
|
||||||
oop exception = thread->pending_exception();
|
oop exception = thread->pending_exception();
|
||||||
jthrowable ret = (jthrowable) JNIHandles::make_local(env, exception);
|
jthrowable ret = (jthrowable) JNIHandles::make_local(THREAD, exception);
|
||||||
|
|
||||||
HOTSPOT_JNI_EXCEPTIONOCCURRED_RETURN(ret);
|
HOTSPOT_JNI_EXCEPTIONOCCURRED_RETURN(ret);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -798,7 +797,7 @@ JNI_ENTRY(jobject, jni_NewLocalRef(JNIEnv *env, jobject ref))
|
||||||
|
|
||||||
HOTSPOT_JNI_NEWLOCALREF_ENTRY(env, ref);
|
HOTSPOT_JNI_NEWLOCALREF_ENTRY(env, ref);
|
||||||
|
|
||||||
jobject ret = JNIHandles::make_local(env, JNIHandles::resolve(ref));
|
jobject ret = JNIHandles::make_local(THREAD, JNIHandles::resolve(ref));
|
||||||
|
|
||||||
HOTSPOT_JNI_NEWLOCALREF_RETURN(ret);
|
HOTSPOT_JNI_NEWLOCALREF_RETURN(ret);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -976,7 +975,7 @@ static void jni_invoke_static(JNIEnv *env, JavaValue* result, jobject receiver,
|
||||||
|
|
||||||
// Convert result
|
// Convert result
|
||||||
if (is_reference_type(result->get_type())) {
|
if (is_reference_type(result->get_type())) {
|
||||||
result->set_jobject(JNIHandles::make_local(env, (oop) result->get_jobject()));
|
result->set_jobject(JNIHandles::make_local(THREAD, (oop) result->get_jobject()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1038,7 +1037,7 @@ static void jni_invoke_nonstatic(JNIEnv *env, JavaValue* result, jobject receive
|
||||||
|
|
||||||
// Convert result
|
// Convert result
|
||||||
if (is_reference_type(result->get_type())) {
|
if (is_reference_type(result->get_type())) {
|
||||||
result->set_jobject(JNIHandles::make_local(env, (oop) result->get_jobject()));
|
result->set_jobject(JNIHandles::make_local(THREAD, (oop) result->get_jobject()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1054,7 +1053,7 @@ JNI_ENTRY(jobject, jni_AllocObject(JNIEnv *env, jclass clazz))
|
||||||
DT_RETURN_MARK(AllocObject, jobject, (const jobject&)ret);
|
DT_RETURN_MARK(AllocObject, jobject, (const jobject&)ret);
|
||||||
|
|
||||||
instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(clazz), CHECK_NULL);
|
instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(clazz), CHECK_NULL);
|
||||||
ret = JNIHandles::make_local(env, i);
|
ret = JNIHandles::make_local(THREAD, i);
|
||||||
return ret;
|
return ret;
|
||||||
JNI_END
|
JNI_END
|
||||||
|
|
||||||
|
@ -1070,7 +1069,7 @@ JNI_ENTRY(jobject, jni_NewObjectA(JNIEnv *env, jclass clazz, jmethodID methodID,
|
||||||
DT_RETURN_MARK(NewObjectA, jobject, (const jobject)obj);
|
DT_RETURN_MARK(NewObjectA, jobject, (const jobject)obj);
|
||||||
|
|
||||||
instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(clazz), CHECK_NULL);
|
instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(clazz), CHECK_NULL);
|
||||||
obj = JNIHandles::make_local(env, i);
|
obj = JNIHandles::make_local(THREAD, i);
|
||||||
JavaValue jvalue(T_VOID);
|
JavaValue jvalue(T_VOID);
|
||||||
JNI_ArgumentPusherArray ap(methodID, args);
|
JNI_ArgumentPusherArray ap(methodID, args);
|
||||||
jni_invoke_nonstatic(env, &jvalue, obj, JNI_NONVIRTUAL, methodID, &ap, CHECK_NULL);
|
jni_invoke_nonstatic(env, &jvalue, obj, JNI_NONVIRTUAL, methodID, &ap, CHECK_NULL);
|
||||||
|
@ -1090,7 +1089,7 @@ JNI_ENTRY(jobject, jni_NewObjectV(JNIEnv *env, jclass clazz, jmethodID methodID,
|
||||||
DT_RETURN_MARK(NewObjectV, jobject, (const jobject&)obj);
|
DT_RETURN_MARK(NewObjectV, jobject, (const jobject&)obj);
|
||||||
|
|
||||||
instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(clazz), CHECK_NULL);
|
instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(clazz), CHECK_NULL);
|
||||||
obj = JNIHandles::make_local(env, i);
|
obj = JNIHandles::make_local(THREAD, i);
|
||||||
JavaValue jvalue(T_VOID);
|
JavaValue jvalue(T_VOID);
|
||||||
JNI_ArgumentPusherVaArg ap(methodID, args);
|
JNI_ArgumentPusherVaArg ap(methodID, args);
|
||||||
jni_invoke_nonstatic(env, &jvalue, obj, JNI_NONVIRTUAL, methodID, &ap, CHECK_NULL);
|
jni_invoke_nonstatic(env, &jvalue, obj, JNI_NONVIRTUAL, methodID, &ap, CHECK_NULL);
|
||||||
|
@ -1110,7 +1109,7 @@ JNI_ENTRY(jobject, jni_NewObject(JNIEnv *env, jclass clazz, jmethodID methodID,
|
||||||
DT_RETURN_MARK(NewObject, jobject, (const jobject&)obj);
|
DT_RETURN_MARK(NewObject, jobject, (const jobject&)obj);
|
||||||
|
|
||||||
instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(clazz), CHECK_NULL);
|
instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(clazz), CHECK_NULL);
|
||||||
obj = JNIHandles::make_local(env, i);
|
obj = JNIHandles::make_local(THREAD, i);
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, methodID);
|
va_start(args, methodID);
|
||||||
JavaValue jvalue(T_VOID);
|
JavaValue jvalue(T_VOID);
|
||||||
|
@ -1128,7 +1127,7 @@ JNI_ENTRY(jclass, jni_GetObjectClass(JNIEnv *env, jobject obj))
|
||||||
|
|
||||||
Klass* k = JNIHandles::resolve_non_null(obj)->klass();
|
Klass* k = JNIHandles::resolve_non_null(obj)->klass();
|
||||||
jclass ret =
|
jclass ret =
|
||||||
(jclass) JNIHandles::make_local(env, k->java_mirror());
|
(jclass) JNIHandles::make_local(THREAD, k->java_mirror());
|
||||||
|
|
||||||
HOTSPOT_JNI_GETOBJECTCLASS_RETURN(ret);
|
HOTSPOT_JNI_GETOBJECTCLASS_RETURN(ret);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1910,7 +1909,7 @@ JNI_ENTRY(jobject, jni_GetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID
|
||||||
o = JvmtiExport::jni_GetField_probe(thread, obj, o, k, fieldID, false);
|
o = JvmtiExport::jni_GetField_probe(thread, obj, o, k, fieldID, false);
|
||||||
}
|
}
|
||||||
oop loaded_obj = HeapAccess<ON_UNKNOWN_OOP_REF>::oop_load_at(o, offset);
|
oop loaded_obj = HeapAccess<ON_UNKNOWN_OOP_REF>::oop_load_at(o, offset);
|
||||||
jobject ret = JNIHandles::make_local(env, loaded_obj);
|
jobject ret = JNIHandles::make_local(THREAD, loaded_obj);
|
||||||
HOTSPOT_JNI_GETOBJECTFIELD_RETURN(ret);
|
HOTSPOT_JNI_GETOBJECTFIELD_RETURN(ret);
|
||||||
return ret;
|
return ret;
|
||||||
JNI_END
|
JNI_END
|
||||||
|
@ -2090,7 +2089,7 @@ JNI_ENTRY(jobject, jni_ToReflectedField(JNIEnv *env, jclass cls, jfieldID fieldI
|
||||||
}
|
}
|
||||||
assert(found, "bad fieldID passed into jni_ToReflectedField");
|
assert(found, "bad fieldID passed into jni_ToReflectedField");
|
||||||
oop reflected = Reflection::new_field(&fd, CHECK_NULL);
|
oop reflected = Reflection::new_field(&fd, CHECK_NULL);
|
||||||
ret = JNIHandles::make_local(env, reflected);
|
ret = JNIHandles::make_local(THREAD, reflected);
|
||||||
return ret;
|
return ret;
|
||||||
JNI_END
|
JNI_END
|
||||||
|
|
||||||
|
@ -2150,7 +2149,7 @@ JNI_ENTRY(jobject, jni_GetStaticObjectField(JNIEnv *env, jclass clazz, jfieldID
|
||||||
if (JvmtiExport::should_post_field_access()) {
|
if (JvmtiExport::should_post_field_access()) {
|
||||||
JvmtiExport::jni_GetField_probe(thread, NULL, NULL, id->holder(), fieldID, true);
|
JvmtiExport::jni_GetField_probe(thread, NULL, NULL, id->holder(), fieldID, true);
|
||||||
}
|
}
|
||||||
jobject ret = JNIHandles::make_local(id->holder()->java_mirror()->obj_field(id->offset()));
|
jobject ret = JNIHandles::make_local(THREAD, id->holder()->java_mirror()->obj_field(id->offset()));
|
||||||
HOTSPOT_JNI_GETSTATICOBJECTFIELD_RETURN(ret);
|
HOTSPOT_JNI_GETSTATICOBJECTFIELD_RETURN(ret);
|
||||||
return ret;
|
return ret;
|
||||||
JNI_END
|
JNI_END
|
||||||
|
@ -2277,7 +2276,7 @@ JNI_ENTRY(jstring, jni_NewString(JNIEnv *env, const jchar *unicodeChars, jsize l
|
||||||
jstring ret = NULL;
|
jstring ret = NULL;
|
||||||
DT_RETURN_MARK(NewString, jstring, (const jstring&)ret);
|
DT_RETURN_MARK(NewString, jstring, (const jstring&)ret);
|
||||||
oop string=java_lang_String::create_oop_from_unicode((jchar*) unicodeChars, len, CHECK_NULL);
|
oop string=java_lang_String::create_oop_from_unicode((jchar*) unicodeChars, len, CHECK_NULL);
|
||||||
ret = (jstring) JNIHandles::make_local(env, string);
|
ret = (jstring) JNIHandles::make_local(THREAD, string);
|
||||||
return ret;
|
return ret;
|
||||||
JNI_END
|
JNI_END
|
||||||
|
|
||||||
|
@ -2353,7 +2352,7 @@ JNI_ENTRY(jstring, jni_NewStringUTF(JNIEnv *env, const char *bytes))
|
||||||
DT_RETURN_MARK(NewStringUTF, jstring, (const jstring&)ret);
|
DT_RETURN_MARK(NewStringUTF, jstring, (const jstring&)ret);
|
||||||
|
|
||||||
oop result = java_lang_String::create_oop_from_str((char*) bytes, CHECK_NULL);
|
oop result = java_lang_String::create_oop_from_str((char*) bytes, CHECK_NULL);
|
||||||
ret = (jstring) JNIHandles::make_local(env, result);
|
ret = (jstring) JNIHandles::make_local(THREAD, result);
|
||||||
return ret;
|
return ret;
|
||||||
JNI_END
|
JNI_END
|
||||||
|
|
||||||
|
@ -2433,7 +2432,7 @@ JNI_ENTRY(jobjectArray, jni_NewObjectArray(JNIEnv *env, jsize length, jclass ele
|
||||||
result->obj_at_put(index, initial_value);
|
result->obj_at_put(index, initial_value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ret = (jobjectArray) JNIHandles::make_local(env, result);
|
ret = (jobjectArray) JNIHandles::make_local(THREAD, result);
|
||||||
return ret;
|
return ret;
|
||||||
JNI_END
|
JNI_END
|
||||||
|
|
||||||
|
@ -2447,7 +2446,7 @@ JNI_ENTRY(jobject, jni_GetObjectArrayElement(JNIEnv *env, jobjectArray array, js
|
||||||
DT_RETURN_MARK(GetObjectArrayElement, jobject, (const jobject&)ret);
|
DT_RETURN_MARK(GetObjectArrayElement, jobject, (const jobject&)ret);
|
||||||
objArrayOop a = objArrayOop(JNIHandles::resolve_non_null(array));
|
objArrayOop a = objArrayOop(JNIHandles::resolve_non_null(array));
|
||||||
if (a->is_within_bounds(index)) {
|
if (a->is_within_bounds(index)) {
|
||||||
ret = JNIHandles::make_local(env, a->obj_at(index));
|
ret = JNIHandles::make_local(THREAD, a->obj_at(index));
|
||||||
return ret;
|
return ret;
|
||||||
} else {
|
} else {
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(THREAD);
|
||||||
|
@ -2507,7 +2506,7 @@ JNI_ENTRY(Return, \
|
||||||
DT_RETURN_MARK(New##Result##Array, Return, (const Return&)ret);\
|
DT_RETURN_MARK(New##Result##Array, Return, (const Return&)ret);\
|
||||||
\
|
\
|
||||||
oop obj= oopFactory::Allocator(len, CHECK_NULL); \
|
oop obj= oopFactory::Allocator(len, CHECK_NULL); \
|
||||||
ret = (Return) JNIHandles::make_local(env, obj); \
|
ret = (Return) JNIHandles::make_local(THREAD, obj); \
|
||||||
return ret;\
|
return ret;\
|
||||||
JNI_END
|
JNI_END
|
||||||
|
|
||||||
|
|
|
@ -141,7 +141,7 @@ static void trace_class_resolution_impl(Klass* to_class, TRAPS) {
|
||||||
const char * source_file = NULL;
|
const char * source_file = NULL;
|
||||||
const char * trace = "explicit";
|
const char * trace = "explicit";
|
||||||
InstanceKlass* caller = NULL;
|
InstanceKlass* caller = NULL;
|
||||||
JavaThread* jthread = JavaThread::current();
|
JavaThread* jthread = (JavaThread*) THREAD;
|
||||||
if (jthread->has_last_Java_frame()) {
|
if (jthread->has_last_Java_frame()) {
|
||||||
vframeStream vfst(jthread);
|
vframeStream vfst(jthread);
|
||||||
|
|
||||||
|
@ -447,7 +447,7 @@ JVM_ENTRY(jobjectArray, JVM_GetProperties(JNIEnv *env))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (jobjectArray) JNIHandles::make_local(env, result_h());
|
return (jobjectArray) JNIHandles::make_local(THREAD, result_h());
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -464,7 +464,7 @@ JVM_ENTRY(jstring, JVM_GetTemporaryDirectory(JNIEnv *env))
|
||||||
HandleMark hm(THREAD);
|
HandleMark hm(THREAD);
|
||||||
const char* temp_dir = os::get_temp_directory();
|
const char* temp_dir = os::get_temp_directory();
|
||||||
Handle h = java_lang_String::create_from_platform_dependent_str(temp_dir, CHECK_NULL);
|
Handle h = java_lang_String::create_from_platform_dependent_str(temp_dir, CHECK_NULL);
|
||||||
return (jstring) JNIHandles::make_local(env, h());
|
return (jstring) JNIHandles::make_local(THREAD, h());
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -568,7 +568,7 @@ JVM_ENTRY(jstring, JVM_GetExtendedNPEMessage(JNIEnv *env, jthrowable throwable))
|
||||||
bool ok = BytecodeUtils::get_NPE_message_at(&ss, method, bci);
|
bool ok = BytecodeUtils::get_NPE_message_at(&ss, method, bci);
|
||||||
if (ok) {
|
if (ok) {
|
||||||
oop result = java_lang_String::create_oop_from_str(ss.base(), CHECK_NULL);
|
oop result = java_lang_String::create_oop_from_str(ss.base(), CHECK_NULL);
|
||||||
return (jstring) JNIHandles::make_local(env, result);
|
return (jstring) JNIHandles::make_local(THREAD, result);
|
||||||
} else {
|
} else {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -622,7 +622,7 @@ JVM_ENTRY(jobject, JVM_CallStackWalk(JNIEnv *env, jobject stackStream, jlong mod
|
||||||
|
|
||||||
oop result = StackWalk::walk(stackStream_h, mode, skip_frames, frame_count,
|
oop result = StackWalk::walk(stackStream_h, mode, skip_frames, frame_count,
|
||||||
start_index, frames_array_h, CHECK_NULL);
|
start_index, frames_array_h, CHECK_NULL);
|
||||||
return JNIHandles::make_local(env, result);
|
return JNIHandles::make_local(THREAD, result);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -630,7 +630,6 @@ JVM_ENTRY(jint, JVM_MoreStackWalk(JNIEnv *env, jobject stackStream, jlong mode,
|
||||||
jint frame_count, jint start_index,
|
jint frame_count, jint start_index,
|
||||||
jobjectArray frames))
|
jobjectArray frames))
|
||||||
JVMWrapper("JVM_MoreStackWalk");
|
JVMWrapper("JVM_MoreStackWalk");
|
||||||
JavaThread* jt = (JavaThread*) THREAD;
|
|
||||||
|
|
||||||
// frames array is a Class<?>[] array when only getting caller reference,
|
// frames array is a Class<?>[] array when only getting caller reference,
|
||||||
// and a StackFrameInfo[] array (or derivative) otherwise. It should never
|
// and a StackFrameInfo[] array (or derivative) otherwise. It should never
|
||||||
|
@ -738,7 +737,7 @@ JVM_ENTRY(jobject, JVM_Clone(JNIEnv* env, jobject handle))
|
||||||
new_obj = Handle(THREAD, new_obj_oop);
|
new_obj = Handle(THREAD, new_obj_oop);
|
||||||
}
|
}
|
||||||
|
|
||||||
return JNIHandles::make_local(env, new_obj());
|
return JNIHandles::make_local(THREAD, new_obj());
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
// java.io.File ///////////////////////////////////////////////////////////////
|
// java.io.File ///////////////////////////////////////////////////////////////
|
||||||
|
@ -784,7 +783,7 @@ JVM_ENTRY(jclass, JVM_GetCallerClass(JNIEnv* env))
|
||||||
default:
|
default:
|
||||||
if (!m->is_ignored_by_security_stack_walk()) {
|
if (!m->is_ignored_by_security_stack_walk()) {
|
||||||
// We have reached the desired frame; return the holder class.
|
// We have reached the desired frame; return the holder class.
|
||||||
return (jclass) JNIHandles::make_local(env, m->method_holder()->java_mirror());
|
return (jclass) JNIHandles::make_local(THREAD, m->method_holder()->java_mirror());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -803,7 +802,7 @@ JVM_ENTRY(jclass, JVM_FindPrimitiveClass(JNIEnv* env, const char* utf))
|
||||||
if (mirror == NULL) {
|
if (mirror == NULL) {
|
||||||
THROW_MSG_0(vmSymbols::java_lang_ClassNotFoundException(), (char*) utf);
|
THROW_MSG_0(vmSymbols::java_lang_ClassNotFoundException(), (char*) utf);
|
||||||
} else {
|
} else {
|
||||||
return (jclass) JNIHandles::make_local(env, mirror);
|
return (jclass) JNIHandles::make_local(THREAD, mirror);
|
||||||
}
|
}
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
@ -832,7 +831,7 @@ JVM_ENTRY(jclass, JVM_FindClassFromBootLoader(JNIEnv* env,
|
||||||
if (log_is_enabled(Debug, class, resolve)) {
|
if (log_is_enabled(Debug, class, resolve)) {
|
||||||
trace_class_resolution(k);
|
trace_class_resolution(k);
|
||||||
}
|
}
|
||||||
return (jclass) JNIHandles::make_local(env, k->java_mirror());
|
return (jclass) JNIHandles::make_local(THREAD, k->java_mirror());
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
// Find a class with this name in this loader, using the caller's protection domain.
|
// Find a class with this name in this loader, using the caller's protection domain.
|
||||||
|
@ -920,7 +919,7 @@ static void is_lock_held_by_thread(Handle loader, PerfCounter* counter, TRAPS) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// common code for JVM_DefineClass() and JVM_DefineClassWithSource()
|
// common code for JVM_DefineClass() and JVM_DefineClassWithSource()
|
||||||
static jclass jvm_define_class_common(JNIEnv *env, const char *name,
|
static jclass jvm_define_class_common(const char *name,
|
||||||
jobject loader, const jbyte *buf,
|
jobject loader, const jbyte *buf,
|
||||||
jsize len, jobject pd, const char *source,
|
jsize len, jobject pd, const char *source,
|
||||||
TRAPS) {
|
TRAPS) {
|
||||||
|
@ -964,7 +963,7 @@ static jclass jvm_define_class_common(JNIEnv *env, const char *name,
|
||||||
trace_class_resolution(k);
|
trace_class_resolution(k);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (jclass) JNIHandles::make_local(env, k->java_mirror());
|
return (jclass) JNIHandles::make_local(THREAD, k->java_mirror());
|
||||||
}
|
}
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -978,11 +977,10 @@ enum {
|
||||||
* Define a class with the specified flags that indicates if it's a nestmate,
|
* Define a class with the specified flags that indicates if it's a nestmate,
|
||||||
* hidden, or strongly referenced from class loader.
|
* hidden, or strongly referenced from class loader.
|
||||||
*/
|
*/
|
||||||
static jclass jvm_lookup_define_class(JNIEnv *env, jclass lookup, const char *name,
|
static jclass jvm_lookup_define_class(jclass lookup, const char *name,
|
||||||
const jbyte *buf, jsize len, jobject pd,
|
const jbyte *buf, jsize len, jobject pd,
|
||||||
jboolean init, int flags, jobject classData, TRAPS) {
|
jboolean init, int flags, jobject classData, TRAPS) {
|
||||||
assert(THREAD->is_Java_thread(), "must be a JavaThread");
|
assert(THREAD->is_Java_thread(), "must be a JavaThread");
|
||||||
JavaThread* jt = (JavaThread*) THREAD;
|
|
||||||
ResourceMark rm(THREAD);
|
ResourceMark rm(THREAD);
|
||||||
|
|
||||||
Klass* lookup_k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(lookup));
|
Klass* lookup_k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(lookup));
|
||||||
|
@ -1099,13 +1097,13 @@ static jclass jvm_lookup_define_class(JNIEnv *env, jclass lookup, const char *na
|
||||||
ik->link_class(CHECK_NULL);
|
ik->link_class(CHECK_NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (jclass) JNIHandles::make_local(env, defined_k->java_mirror());
|
return (jclass) JNIHandles::make_local(THREAD, defined_k->java_mirror());
|
||||||
}
|
}
|
||||||
|
|
||||||
JVM_ENTRY(jclass, JVM_DefineClass(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd))
|
JVM_ENTRY(jclass, JVM_DefineClass(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd))
|
||||||
JVMWrapper("JVM_DefineClass");
|
JVMWrapper("JVM_DefineClass");
|
||||||
|
|
||||||
return jvm_define_class_common(env, name, loader, buf, len, pd, NULL, THREAD);
|
return jvm_define_class_common(name, loader, buf, len, pd, NULL, THREAD);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1129,13 +1127,13 @@ JVM_ENTRY(jclass, JVM_LookupDefineClass(JNIEnv *env, jclass lookup, const char *
|
||||||
|
|
||||||
assert(buf != NULL, "buf must not be NULL");
|
assert(buf != NULL, "buf must not be NULL");
|
||||||
|
|
||||||
return jvm_lookup_define_class(env, lookup, name, buf, len, pd, initialize, flags, classData, THREAD);
|
return jvm_lookup_define_class(lookup, name, buf, len, pd, initialize, flags, classData, THREAD);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
JVM_ENTRY(jclass, JVM_DefineClassWithSource(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd, const char *source))
|
JVM_ENTRY(jclass, JVM_DefineClassWithSource(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd, const char *source))
|
||||||
JVMWrapper("JVM_DefineClassWithSource");
|
JVMWrapper("JVM_DefineClassWithSource");
|
||||||
|
|
||||||
return jvm_define_class_common(env, name, loader, buf, len, pd, source, THREAD);
|
return jvm_define_class_common(name, loader, buf, len, pd, source, THREAD);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
JVM_ENTRY(jclass, JVM_FindLoadedClass(JNIEnv *env, jobject loader, jstring name))
|
JVM_ENTRY(jclass, JVM_FindLoadedClass(JNIEnv *env, jobject loader, jstring name))
|
||||||
|
@ -1151,10 +1149,10 @@ JVM_ENTRY(jclass, JVM_FindLoadedClass(JNIEnv *env, jobject loader, jstring name)
|
||||||
// Internalize the string, converting '.' to '/' in string.
|
// Internalize the string, converting '.' to '/' in string.
|
||||||
char* p = (char*)str;
|
char* p = (char*)str;
|
||||||
while (*p != '\0') {
|
while (*p != '\0') {
|
||||||
if (*p == '.') {
|
if (*p == '.') {
|
||||||
*p = '/';
|
*p = '/';
|
||||||
}
|
}
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
|
|
||||||
const int str_len = (int)(p - str);
|
const int str_len = (int)(p - str);
|
||||||
|
@ -1187,7 +1185,7 @@ JVM_ENTRY(jclass, JVM_FindLoadedClass(JNIEnv *env, jobject loader, jstring name)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return (k == NULL) ? NULL :
|
return (k == NULL) ? NULL :
|
||||||
(jclass) JNIHandles::make_local(env, k->java_mirror());
|
(jclass) JNIHandles::make_local(THREAD, k->java_mirror());
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
// Module support //////////////////////////////////////////////////////////////////////////////
|
// Module support //////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -1233,7 +1231,7 @@ JVM_ENTRY(jstring, JVM_InitClassName(JNIEnv *env, jclass cls))
|
||||||
HandleMark hm(THREAD);
|
HandleMark hm(THREAD);
|
||||||
Handle java_class(THREAD, JNIHandles::resolve(cls));
|
Handle java_class(THREAD, JNIHandles::resolve(cls));
|
||||||
oop result = java_lang_Class::name(java_class, CHECK_NULL);
|
oop result = java_lang_Class::name(java_class, CHECK_NULL);
|
||||||
return (jstring) JNIHandles::make_local(env, result);
|
return (jstring) JNIHandles::make_local(THREAD, result);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -1246,7 +1244,7 @@ JVM_ENTRY(jobjectArray, JVM_GetClassInterfaces(JNIEnv *env, jclass cls))
|
||||||
if (java_lang_Class::is_primitive(mirror)) {
|
if (java_lang_Class::is_primitive(mirror)) {
|
||||||
// Primitive objects does not have any interfaces
|
// Primitive objects does not have any interfaces
|
||||||
objArrayOop r = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL);
|
objArrayOop r = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL);
|
||||||
return (jobjectArray) JNIHandles::make_local(env, r);
|
return (jobjectArray) JNIHandles::make_local(THREAD, r);
|
||||||
}
|
}
|
||||||
|
|
||||||
Klass* klass = java_lang_Class::as_Klass(mirror);
|
Klass* klass = java_lang_Class::as_Klass(mirror);
|
||||||
|
@ -1274,7 +1272,7 @@ JVM_ENTRY(jobjectArray, JVM_GetClassInterfaces(JNIEnv *env, jclass cls))
|
||||||
result->obj_at_put(0, SystemDictionary::Cloneable_klass()->java_mirror());
|
result->obj_at_put(0, SystemDictionary::Cloneable_klass()->java_mirror());
|
||||||
result->obj_at_put(1, SystemDictionary::Serializable_klass()->java_mirror());
|
result->obj_at_put(1, SystemDictionary::Serializable_klass()->java_mirror());
|
||||||
}
|
}
|
||||||
return (jobjectArray) JNIHandles::make_local(env, result());
|
return (jobjectArray) JNIHandles::make_local(THREAD, result());
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -1325,7 +1323,7 @@ JVM_ENTRY(jobjectArray, JVM_GetClassSigners(JNIEnv *env, jclass cls))
|
||||||
}
|
}
|
||||||
|
|
||||||
// return the copy
|
// return the copy
|
||||||
return (jobjectArray) JNIHandles::make_local(env, signers_copy);
|
return (jobjectArray) JNIHandles::make_local(THREAD, signers_copy);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -1355,7 +1353,7 @@ JVM_ENTRY(jobject, JVM_GetProtectionDomain(JNIEnv *env, jclass cls))
|
||||||
}
|
}
|
||||||
|
|
||||||
oop pd = java_lang_Class::protection_domain(JNIHandles::resolve(cls));
|
oop pd = java_lang_Class::protection_domain(JNIHandles::resolve(cls));
|
||||||
return (jobject) JNIHandles::make_local(env, pd);
|
return (jobject) JNIHandles::make_local(THREAD, pd);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -1363,7 +1361,7 @@ JVM_END
|
||||||
JVM_ENTRY(jobject, JVM_GetInheritedAccessControlContext(JNIEnv *env, jclass cls))
|
JVM_ENTRY(jobject, JVM_GetInheritedAccessControlContext(JNIEnv *env, jclass cls))
|
||||||
JVMWrapper("JVM_GetInheritedAccessControlContext");
|
JVMWrapper("JVM_GetInheritedAccessControlContext");
|
||||||
oop result = java_lang_Thread::inherited_access_control_context(thread->threadObj());
|
oop result = java_lang_Thread::inherited_access_control_context(thread->threadObj());
|
||||||
return JNIHandles::make_local(env, result);
|
return JNIHandles::make_local(THREAD, result);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
class RegisterArrayForGC {
|
class RegisterArrayForGC {
|
||||||
|
@ -1442,7 +1440,7 @@ JVM_ENTRY(jobject, JVM_GetStackAccessControlContext(JNIEnv *env, jclass cls))
|
||||||
if (is_privileged && privileged_context.is_null()) return NULL;
|
if (is_privileged && privileged_context.is_null()) return NULL;
|
||||||
|
|
||||||
oop result = java_security_AccessControlContext::create(objArrayHandle(), is_privileged, privileged_context, CHECK_NULL);
|
oop result = java_security_AccessControlContext::create(objArrayHandle(), is_privileged, privileged_context, CHECK_NULL);
|
||||||
return JNIHandles::make_local(env, result);
|
return JNIHandles::make_local(THREAD, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
// the resource area must be registered in case of a gc
|
// the resource area must be registered in case of a gc
|
||||||
|
@ -1456,7 +1454,7 @@ JVM_ENTRY(jobject, JVM_GetStackAccessControlContext(JNIEnv *env, jclass cls))
|
||||||
|
|
||||||
oop result = java_security_AccessControlContext::create(h_context, is_privileged, privileged_context, CHECK_NULL);
|
oop result = java_security_AccessControlContext::create(h_context, is_privileged, privileged_context, CHECK_NULL);
|
||||||
|
|
||||||
return JNIHandles::make_local(env, result);
|
return JNIHandles::make_local(THREAD, result);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -1498,7 +1496,7 @@ JVM_ENTRY(jobjectArray, JVM_GetDeclaredClasses(JNIEnv *env, jclass ofClass))
|
||||||
if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
|
if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) ||
|
||||||
! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_instance_klass()) {
|
! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_instance_klass()) {
|
||||||
oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL);
|
oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL);
|
||||||
return (jobjectArray)JNIHandles::make_local(env, result);
|
return (jobjectArray)JNIHandles::make_local(THREAD, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
|
InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
|
||||||
|
@ -1507,7 +1505,7 @@ JVM_ENTRY(jobjectArray, JVM_GetDeclaredClasses(JNIEnv *env, jclass ofClass))
|
||||||
if (iter.length() == 0) {
|
if (iter.length() == 0) {
|
||||||
// Neither an inner nor outer class
|
// Neither an inner nor outer class
|
||||||
oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL);
|
oop result = oopFactory::new_objArray(SystemDictionary::Class_klass(), 0, CHECK_NULL);
|
||||||
return (jobjectArray)JNIHandles::make_local(env, result);
|
return (jobjectArray)JNIHandles::make_local(THREAD, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
// find inner class info
|
// find inner class info
|
||||||
|
@ -1549,10 +1547,10 @@ JVM_ENTRY(jobjectArray, JVM_GetDeclaredClasses(JNIEnv *env, jclass ofClass))
|
||||||
for(int i = 0; i < members; i++) {
|
for(int i = 0; i < members; i++) {
|
||||||
res->obj_at_put(i, result->obj_at(i));
|
res->obj_at_put(i, result->obj_at(i));
|
||||||
}
|
}
|
||||||
return (jobjectArray)JNIHandles::make_local(env, res);
|
return (jobjectArray)JNIHandles::make_local(THREAD, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (jobjectArray)JNIHandles::make_local(env, result());
|
return (jobjectArray)JNIHandles::make_local(THREAD, result());
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -1570,7 +1568,7 @@ JVM_ENTRY(jclass, JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass))
|
||||||
)->compute_enclosing_class(&inner_is_member, CHECK_NULL);
|
)->compute_enclosing_class(&inner_is_member, CHECK_NULL);
|
||||||
if (outer_klass == NULL) return NULL; // already a top-level class
|
if (outer_klass == NULL) return NULL; // already a top-level class
|
||||||
if (!inner_is_member) return NULL; // a hidden or unsafe anonymous class (inside a method)
|
if (!inner_is_member) return NULL; // a hidden or unsafe anonymous class (inside a method)
|
||||||
return (jclass) JNIHandles::make_local(env, outer_klass->java_mirror());
|
return (jclass) JNIHandles::make_local(THREAD, outer_klass->java_mirror());
|
||||||
}
|
}
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
@ -1588,7 +1586,7 @@ JVM_ENTRY(jstring, JVM_GetSimpleBinaryName(JNIEnv *env, jclass cls))
|
||||||
constantPoolHandle i_cp(thread, k->constants());
|
constantPoolHandle i_cp(thread, k->constants());
|
||||||
Symbol* name = i_cp->symbol_at(noff);
|
Symbol* name = i_cp->symbol_at(noff);
|
||||||
Handle str = java_lang_String::create_from_symbol(name, CHECK_NULL);
|
Handle str = java_lang_String::create_from_symbol(name, CHECK_NULL);
|
||||||
return (jstring) JNIHandles::make_local(env, str());
|
return (jstring) JNIHandles::make_local(THREAD, str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1607,7 +1605,7 @@ JVM_ENTRY(jstring, JVM_GetClassSignature(JNIEnv *env, jclass cls))
|
||||||
Symbol* sym = InstanceKlass::cast(k)->generic_signature();
|
Symbol* sym = InstanceKlass::cast(k)->generic_signature();
|
||||||
if (sym == NULL) return NULL;
|
if (sym == NULL) return NULL;
|
||||||
Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL);
|
Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL);
|
||||||
return (jstring) JNIHandles::make_local(env, str());
|
return (jstring) JNIHandles::make_local(THREAD, str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1623,7 +1621,7 @@ JVM_ENTRY(jbyteArray, JVM_GetClassAnnotations(JNIEnv *env, jclass cls))
|
||||||
Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
|
Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls));
|
||||||
if (k->is_instance_klass()) {
|
if (k->is_instance_klass()) {
|
||||||
typeArrayOop a = Annotations::make_java_array(InstanceKlass::cast(k)->class_annotations(), CHECK_NULL);
|
typeArrayOop a = Annotations::make_java_array(InstanceKlass::cast(k)->class_annotations(), CHECK_NULL);
|
||||||
return (jbyteArray) JNIHandles::make_local(env, a);
|
return (jbyteArray) JNIHandles::make_local(THREAD, a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1695,7 +1693,7 @@ JVM_ENTRY(jbyteArray, JVM_GetClassTypeAnnotations(JNIEnv *env, jclass cls))
|
||||||
AnnotationArray* type_annotations = InstanceKlass::cast(k)->class_type_annotations();
|
AnnotationArray* type_annotations = InstanceKlass::cast(k)->class_type_annotations();
|
||||||
if (type_annotations != NULL) {
|
if (type_annotations != NULL) {
|
||||||
typeArrayOop a = Annotations::make_java_array(type_annotations, CHECK_NULL);
|
typeArrayOop a = Annotations::make_java_array(type_annotations, CHECK_NULL);
|
||||||
return (jbyteArray) JNIHandles::make_local(env, a);
|
return (jbyteArray) JNIHandles::make_local(THREAD, a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1715,7 +1713,7 @@ JVM_ENTRY(jbyteArray, JVM_GetMethodTypeAnnotations(JNIEnv *env, jobject method))
|
||||||
AnnotationArray* type_annotations = m->type_annotations();
|
AnnotationArray* type_annotations = m->type_annotations();
|
||||||
if (type_annotations != NULL) {
|
if (type_annotations != NULL) {
|
||||||
typeArrayOop a = Annotations::make_java_array(type_annotations, CHECK_NULL);
|
typeArrayOop a = Annotations::make_java_array(type_annotations, CHECK_NULL);
|
||||||
return (jbyteArray) JNIHandles::make_local(env, a);
|
return (jbyteArray) JNIHandles::make_local(THREAD, a);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1731,7 +1729,7 @@ JVM_ENTRY(jbyteArray, JVM_GetFieldTypeAnnotations(JNIEnv *env, jobject field))
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (jbyteArray) JNIHandles::make_local(env, Annotations::make_java_array(fd.type_annotations(), THREAD));
|
return (jbyteArray) JNIHandles::make_local(THREAD, Annotations::make_java_array(fd.type_annotations(), THREAD));
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
static void bounds_check(const constantPoolHandle& cp, jint index, TRAPS) {
|
static void bounds_check(const constantPoolHandle& cp, jint index, TRAPS) {
|
||||||
|
@ -1787,7 +1785,7 @@ JVM_ENTRY(jobjectArray, JVM_GetMethodParameters(JNIEnv *env, jobject method))
|
||||||
flags, CHECK_NULL);
|
flags, CHECK_NULL);
|
||||||
result->obj_at_put(i, param);
|
result->obj_at_put(i, param);
|
||||||
}
|
}
|
||||||
return (jobjectArray)JNIHandles::make_local(env, result());
|
return (jobjectArray)JNIHandles::make_local(THREAD, result());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
JVM_END
|
JVM_END
|
||||||
|
@ -1804,7 +1802,7 @@ JVM_ENTRY(jobjectArray, JVM_GetClassDeclaredFields(JNIEnv *env, jclass ofClass,
|
||||||
java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_array_klass()) {
|
java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_array_klass()) {
|
||||||
// Return empty array
|
// Return empty array
|
||||||
oop res = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), 0, CHECK_NULL);
|
oop res = oopFactory::new_objArray(SystemDictionary::reflect_Field_klass(), 0, CHECK_NULL);
|
||||||
return (jobjectArray) JNIHandles::make_local(env, res);
|
return (jobjectArray) JNIHandles::make_local(THREAD, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
|
InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
|
||||||
|
@ -1839,7 +1837,7 @@ JVM_ENTRY(jobjectArray, JVM_GetClassDeclaredFields(JNIEnv *env, jclass ofClass,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert(out_idx == num_fields, "just checking");
|
assert(out_idx == num_fields, "just checking");
|
||||||
return (jobjectArray) JNIHandles::make_local(env, result());
|
return (jobjectArray) JNIHandles::make_local(THREAD, result());
|
||||||
}
|
}
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
@ -1881,13 +1879,13 @@ JVM_ENTRY(jobjectArray, JVM_GetRecordComponents(JNIEnv* env, jclass ofClass))
|
||||||
oop component_oop = java_lang_reflect_RecordComponent::create(ik, component, CHECK_NULL);
|
oop component_oop = java_lang_reflect_RecordComponent::create(ik, component, CHECK_NULL);
|
||||||
components_h->obj_at_put(x, component_oop);
|
components_h->obj_at_put(x, component_oop);
|
||||||
}
|
}
|
||||||
return (jobjectArray)JNIHandles::make_local(components_h());
|
return (jobjectArray)JNIHandles::make_local(THREAD, components_h());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return empty array if ofClass is not a record.
|
// Return empty array if ofClass is not a record.
|
||||||
objArrayOop result = oopFactory::new_objArray(SystemDictionary::RecordComponent_klass(), 0, CHECK_NULL);
|
objArrayOop result = oopFactory::new_objArray(SystemDictionary::RecordComponent_klass(), 0, CHECK_NULL);
|
||||||
return (jobjectArray)JNIHandles::make_local(env, result);
|
return (jobjectArray)JNIHandles::make_local(THREAD, result);
|
||||||
}
|
}
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
@ -1912,7 +1910,7 @@ static jobjectArray get_class_declared_methods_helper(
|
||||||
|| java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_array_klass()) {
|
|| java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_array_klass()) {
|
||||||
// Return empty array
|
// Return empty array
|
||||||
oop res = oopFactory::new_objArray(klass, 0, CHECK_NULL);
|
oop res = oopFactory::new_objArray(klass, 0, CHECK_NULL);
|
||||||
return (jobjectArray) JNIHandles::make_local(env, res);
|
return (jobjectArray) JNIHandles::make_local(THREAD, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
|
InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)));
|
||||||
|
@ -1965,7 +1963,7 @@ static jobjectArray get_class_declared_methods_helper(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (jobjectArray) JNIHandles::make_local(env, result());
|
return (jobjectArray) JNIHandles::make_local(THREAD, result());
|
||||||
}
|
}
|
||||||
|
|
||||||
JVM_ENTRY(jobjectArray, JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass, jboolean publicOnly))
|
JVM_ENTRY(jobjectArray, JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass, jboolean publicOnly))
|
||||||
|
@ -2147,7 +2145,7 @@ JVM_ENTRY(jobject, JVM_GetClassConstantPool(JNIEnv *env, jclass cls))
|
||||||
InstanceKlass* k_h = InstanceKlass::cast(k);
|
InstanceKlass* k_h = InstanceKlass::cast(k);
|
||||||
Handle jcp = reflect_ConstantPool::create(CHECK_NULL);
|
Handle jcp = reflect_ConstantPool::create(CHECK_NULL);
|
||||||
reflect_ConstantPool::set_cp(jcp(), k_h->constants());
|
reflect_ConstantPool::set_cp(jcp(), k_h->constants());
|
||||||
return JNIHandles::make_local(jcp());
|
return JNIHandles::make_local(THREAD, jcp());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -2174,7 +2172,7 @@ JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAt(JNIEnv *env, jobject obj, jobject u
|
||||||
THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
|
THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
|
||||||
}
|
}
|
||||||
Klass* k = cp->klass_at(index, CHECK_NULL);
|
Klass* k = cp->klass_at(index, CHECK_NULL);
|
||||||
return (jclass) JNIHandles::make_local(k->java_mirror());
|
return (jclass) JNIHandles::make_local(THREAD, k->java_mirror());
|
||||||
}
|
}
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
@ -2189,7 +2187,7 @@ JVM_ENTRY(jclass, JVM_ConstantPoolGetClassAtIfLoaded(JNIEnv *env, jobject obj, j
|
||||||
}
|
}
|
||||||
Klass* k = ConstantPool::klass_at_if_loaded(cp, index);
|
Klass* k = ConstantPool::klass_at_if_loaded(cp, index);
|
||||||
if (k == NULL) return NULL;
|
if (k == NULL) return NULL;
|
||||||
return (jclass) JNIHandles::make_local(k->java_mirror());
|
return (jclass) JNIHandles::make_local(THREAD, k->java_mirror());
|
||||||
}
|
}
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
@ -2219,7 +2217,7 @@ static jobject get_method_at_helper(const constantPoolHandle& cp, jint index, bo
|
||||||
} else {
|
} else {
|
||||||
method = Reflection::new_constructor(m, CHECK_NULL);
|
method = Reflection::new_constructor(m, CHECK_NULL);
|
||||||
}
|
}
|
||||||
return JNIHandles::make_local(method);
|
return JNIHandles::make_local(THREAD, method);
|
||||||
}
|
}
|
||||||
|
|
||||||
JVM_ENTRY(jobject, JVM_ConstantPoolGetMethodAt(JNIEnv *env, jobject obj, jobject unused, jint index))
|
JVM_ENTRY(jobject, JVM_ConstantPoolGetMethodAt(JNIEnv *env, jobject obj, jobject unused, jint index))
|
||||||
|
@ -2266,7 +2264,7 @@ static jobject get_field_at_helper(constantPoolHandle cp, jint index, bool force
|
||||||
THROW_MSG_0(vmSymbols::java_lang_RuntimeException(), "Unable to look up field in target class");
|
THROW_MSG_0(vmSymbols::java_lang_RuntimeException(), "Unable to look up field in target class");
|
||||||
}
|
}
|
||||||
oop field = Reflection::new_field(&fd, CHECK_NULL);
|
oop field = Reflection::new_field(&fd, CHECK_NULL);
|
||||||
return JNIHandles::make_local(field);
|
return JNIHandles::make_local(THREAD, field);
|
||||||
}
|
}
|
||||||
|
|
||||||
JVM_ENTRY(jobject, JVM_ConstantPoolGetFieldAt(JNIEnv *env, jobject obj, jobject unusedl, jint index))
|
JVM_ENTRY(jobject, JVM_ConstantPoolGetFieldAt(JNIEnv *env, jobject obj, jobject unusedl, jint index))
|
||||||
|
@ -2313,7 +2311,7 @@ JVM_ENTRY(jobjectArray, JVM_ConstantPoolGetMemberRefInfoAt(JNIEnv *env, jobject
|
||||||
dest->obj_at_put(1, str());
|
dest->obj_at_put(1, str());
|
||||||
str = java_lang_String::create_from_symbol(member_sig, CHECK_NULL);
|
str = java_lang_String::create_from_symbol(member_sig, CHECK_NULL);
|
||||||
dest->obj_at_put(2, str());
|
dest->obj_at_put(2, str());
|
||||||
return (jobjectArray) JNIHandles::make_local(dest());
|
return (jobjectArray) JNIHandles::make_local(THREAD, dest());
|
||||||
}
|
}
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
@ -2363,7 +2361,7 @@ JVM_ENTRY(jobjectArray, JVM_ConstantPoolGetNameAndTypeRefInfoAt(JNIEnv *env, job
|
||||||
dest->obj_at_put(0, str());
|
dest->obj_at_put(0, str());
|
||||||
str = java_lang_String::create_from_symbol(member_sig, CHECK_NULL);
|
str = java_lang_String::create_from_symbol(member_sig, CHECK_NULL);
|
||||||
dest->obj_at_put(1, str());
|
dest->obj_at_put(1, str());
|
||||||
return (jobjectArray) JNIHandles::make_local(dest());
|
return (jobjectArray) JNIHandles::make_local(THREAD, dest());
|
||||||
}
|
}
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
@ -2429,7 +2427,7 @@ JVM_ENTRY(jstring, JVM_ConstantPoolGetStringAt(JNIEnv *env, jobject obj, jobject
|
||||||
THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
|
THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Wrong type at constant pool index");
|
||||||
}
|
}
|
||||||
oop str = cp->string_at(index, CHECK_NULL);
|
oop str = cp->string_at(index, CHECK_NULL);
|
||||||
return (jstring) JNIHandles::make_local(str);
|
return (jstring) JNIHandles::make_local(THREAD, str);
|
||||||
}
|
}
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
@ -2445,7 +2443,7 @@ JVM_ENTRY(jstring, JVM_ConstantPoolGetUTF8At(JNIEnv *env, jobject obj, jobject u
|
||||||
}
|
}
|
||||||
Symbol* sym = cp->symbol_at(index);
|
Symbol* sym = cp->symbol_at(index);
|
||||||
Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL);
|
Handle str = java_lang_String::create_from_symbol(sym, CHECK_NULL);
|
||||||
return (jstring) JNIHandles::make_local(str());
|
return (jstring) JNIHandles::make_local(THREAD, str());
|
||||||
}
|
}
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
@ -2502,7 +2500,7 @@ JVM_ENTRY(jobject, JVM_AssertionStatusDirectives(JNIEnv *env, jclass unused))
|
||||||
JVMWrapper("JVM_AssertionStatusDirectives");
|
JVMWrapper("JVM_AssertionStatusDirectives");
|
||||||
JvmtiVMObjectAllocEventCollector oam;
|
JvmtiVMObjectAllocEventCollector oam;
|
||||||
oop asd = JavaAssertions::createAssertionStatusDirectives(CHECK_NULL);
|
oop asd = JavaAssertions::createAssertionStatusDirectives(CHECK_NULL);
|
||||||
return JNIHandles::make_local(env, asd);
|
return JNIHandles::make_local(THREAD, asd);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
// Verification ////////////////////////////////////////////////////////////////////////////////
|
// Verification ////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -3284,8 +3282,8 @@ JVM_END
|
||||||
JVM_ENTRY(jobject, JVM_CurrentThread(JNIEnv* env, jclass threadClass))
|
JVM_ENTRY(jobject, JVM_CurrentThread(JNIEnv* env, jclass threadClass))
|
||||||
JVMWrapper("JVM_CurrentThread");
|
JVMWrapper("JVM_CurrentThread");
|
||||||
oop jthread = thread->threadObj();
|
oop jthread = thread->threadObj();
|
||||||
assert (thread != NULL, "no current thread!");
|
assert(jthread != NULL, "no current thread!");
|
||||||
return JNIHandles::make_local(env, jthread);
|
return JNIHandles::make_local(THREAD, jthread);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
JVM_ENTRY(void, JVM_Interrupt(JNIEnv* env, jobject jthread))
|
JVM_ENTRY(void, JVM_Interrupt(JNIEnv* env, jobject jthread))
|
||||||
|
@ -3377,7 +3375,7 @@ JVM_ENTRY(jobjectArray, JVM_GetClassContext(JNIEnv *env))
|
||||||
result->obj_at_put(i, klass_array->at(i)->java_mirror());
|
result->obj_at_put(i, klass_array->at(i)->java_mirror());
|
||||||
}
|
}
|
||||||
|
|
||||||
return (jobjectArray) JNIHandles::make_local(env, result);
|
return (jobjectArray) JNIHandles::make_local(THREAD, result);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -3390,7 +3388,7 @@ JVM_ENTRY(jstring, JVM_GetSystemPackage(JNIEnv *env, jstring name))
|
||||||
JvmtiVMObjectAllocEventCollector oam;
|
JvmtiVMObjectAllocEventCollector oam;
|
||||||
char* str = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(name));
|
char* str = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(name));
|
||||||
oop result = ClassLoader::get_system_package(str, CHECK_NULL);
|
oop result = ClassLoader::get_system_package(str, CHECK_NULL);
|
||||||
return (jstring) JNIHandles::make_local(result);
|
return (jstring) JNIHandles::make_local(THREAD, result);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -3398,7 +3396,7 @@ JVM_ENTRY(jobjectArray, JVM_GetSystemPackages(JNIEnv *env))
|
||||||
JVMWrapper("JVM_GetSystemPackages");
|
JVMWrapper("JVM_GetSystemPackages");
|
||||||
JvmtiVMObjectAllocEventCollector oam;
|
JvmtiVMObjectAllocEventCollector oam;
|
||||||
objArrayOop result = ClassLoader::get_system_packages(CHECK_NULL);
|
objArrayOop result = ClassLoader::get_system_packages(CHECK_NULL);
|
||||||
return (jobjectArray) JNIHandles::make_local(result);
|
return (jobjectArray) JNIHandles::make_local(THREAD, result);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -3413,7 +3411,7 @@ JVM_ENTRY(jobject, JVM_GetAndClearReferencePendingList(JNIEnv* env))
|
||||||
if (ref != NULL) {
|
if (ref != NULL) {
|
||||||
Universe::set_reference_pending_list(NULL);
|
Universe::set_reference_pending_list(NULL);
|
||||||
}
|
}
|
||||||
return JNIHandles::make_local(env, ref);
|
return JNIHandles::make_local(THREAD, ref);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
JVM_ENTRY(jboolean, JVM_HasReferencePendingList(JNIEnv* env))
|
JVM_ENTRY(jboolean, JVM_HasReferencePendingList(JNIEnv* env))
|
||||||
|
@ -3441,7 +3439,7 @@ JVM_ENTRY(jobject, JVM_LatestUserDefinedLoader(JNIEnv *env))
|
||||||
vfst.skip_reflection_related_frames(); // Only needed for 1.4 reflection
|
vfst.skip_reflection_related_frames(); // Only needed for 1.4 reflection
|
||||||
oop loader = vfst.method()->method_holder()->class_loader();
|
oop loader = vfst.method()->method_holder()->class_loader();
|
||||||
if (loader != NULL && !SystemDictionary::is_platform_class_loader(loader)) {
|
if (loader != NULL && !SystemDictionary::is_platform_class_loader(loader)) {
|
||||||
return JNIHandles::make_local(env, loader);
|
return JNIHandles::make_local(THREAD, loader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -3480,7 +3478,7 @@ JVM_ENTRY(jobject, JVM_GetArrayElement(JNIEnv *env, jobject arr, jint index))
|
||||||
jvalue value;
|
jvalue value;
|
||||||
BasicType type = Reflection::array_get(&value, a, index, CHECK_NULL);
|
BasicType type = Reflection::array_get(&value, a, index, CHECK_NULL);
|
||||||
oop box = Reflection::box(&value, type, CHECK_NULL);
|
oop box = Reflection::box(&value, type, CHECK_NULL);
|
||||||
return JNIHandles::make_local(env, box);
|
return JNIHandles::make_local(THREAD, box);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -3530,7 +3528,7 @@ JVM_ENTRY(jobject, JVM_NewArray(JNIEnv *env, jclass eltClass, jint length))
|
||||||
JvmtiVMObjectAllocEventCollector oam;
|
JvmtiVMObjectAllocEventCollector oam;
|
||||||
oop element_mirror = JNIHandles::resolve(eltClass);
|
oop element_mirror = JNIHandles::resolve(eltClass);
|
||||||
oop result = Reflection::reflect_new_array(element_mirror, length, CHECK_NULL);
|
oop result = Reflection::reflect_new_array(element_mirror, length, CHECK_NULL);
|
||||||
return JNIHandles::make_local(env, result);
|
return JNIHandles::make_local(THREAD, result);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -3541,7 +3539,7 @@ JVM_ENTRY(jobject, JVM_NewMultiArray(JNIEnv *env, jclass eltClass, jintArray dim
|
||||||
oop element_mirror = JNIHandles::resolve(eltClass);
|
oop element_mirror = JNIHandles::resolve(eltClass);
|
||||||
assert(dim_array->is_typeArray(), "just checking");
|
assert(dim_array->is_typeArray(), "just checking");
|
||||||
oop result = Reflection::reflect_new_multi_array(element_mirror, typeArrayOop(dim_array), CHECK_NULL);
|
oop result = Reflection::reflect_new_multi_array(element_mirror, typeArrayOop(dim_array), CHECK_NULL);
|
||||||
return JNIHandles::make_local(env, result);
|
return JNIHandles::make_local(THREAD, result);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -3608,7 +3606,7 @@ JVM_ENTRY(jstring, JVM_InternString(JNIEnv *env, jstring str))
|
||||||
if (str == NULL) return NULL;
|
if (str == NULL) return NULL;
|
||||||
oop string = JNIHandles::resolve_non_null(str);
|
oop string = JNIHandles::resolve_non_null(str);
|
||||||
oop result = StringTable::intern(string, CHECK_NULL);
|
oop result = StringTable::intern(string, CHECK_NULL);
|
||||||
return (jstring) JNIHandles::make_local(env, result);
|
return (jstring) JNIHandles::make_local(THREAD, result);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -3667,7 +3665,7 @@ jclass find_class_from_class_loader(JNIEnv* env, Symbol* name, jboolean init,
|
||||||
if (init && klass->is_instance_klass()) {
|
if (init && klass->is_instance_klass()) {
|
||||||
klass->initialize(CHECK_NULL);
|
klass->initialize(CHECK_NULL);
|
||||||
}
|
}
|
||||||
return (jclass) JNIHandles::make_local(env, klass->java_mirror());
|
return (jclass) JNIHandles::make_local(THREAD, klass->java_mirror());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3681,14 +3679,14 @@ JVM_ENTRY(jobject, JVM_InvokeMethod(JNIEnv *env, jobject method, jobject obj, jo
|
||||||
Handle receiver(THREAD, JNIHandles::resolve(obj));
|
Handle receiver(THREAD, JNIHandles::resolve(obj));
|
||||||
objArrayHandle args(THREAD, objArrayOop(JNIHandles::resolve(args0)));
|
objArrayHandle args(THREAD, objArrayOop(JNIHandles::resolve(args0)));
|
||||||
oop result = Reflection::invoke_method(method_handle(), receiver, args, CHECK_NULL);
|
oop result = Reflection::invoke_method(method_handle(), receiver, args, CHECK_NULL);
|
||||||
jobject res = JNIHandles::make_local(env, result);
|
jobject res = JNIHandles::make_local(THREAD, result);
|
||||||
if (JvmtiExport::should_post_vm_object_alloc()) {
|
if (JvmtiExport::should_post_vm_object_alloc()) {
|
||||||
oop ret_type = java_lang_reflect_Method::return_type(method_handle());
|
oop ret_type = java_lang_reflect_Method::return_type(method_handle());
|
||||||
assert(ret_type != NULL, "sanity check: ret_type oop must not be NULL!");
|
assert(ret_type != NULL, "sanity check: ret_type oop must not be NULL!");
|
||||||
if (java_lang_Class::is_primitive(ret_type)) {
|
if (java_lang_Class::is_primitive(ret_type)) {
|
||||||
// Only for primitive type vm allocates memory for java object.
|
// Only for primitive type vm allocates memory for java object.
|
||||||
// See box() method.
|
// See box() method.
|
||||||
JvmtiExport::post_vm_object_alloc(JavaThread::current(), result);
|
JvmtiExport::post_vm_object_alloc(thread, result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
@ -3703,9 +3701,9 @@ JVM_ENTRY(jobject, JVM_NewInstanceFromConstructor(JNIEnv *env, jobject c, jobjec
|
||||||
oop constructor_mirror = JNIHandles::resolve(c);
|
oop constructor_mirror = JNIHandles::resolve(c);
|
||||||
objArrayHandle args(THREAD, objArrayOop(JNIHandles::resolve(args0)));
|
objArrayHandle args(THREAD, objArrayOop(JNIHandles::resolve(args0)));
|
||||||
oop result = Reflection::invoke_constructor(constructor_mirror, args, CHECK_NULL);
|
oop result = Reflection::invoke_constructor(constructor_mirror, args, CHECK_NULL);
|
||||||
jobject res = JNIHandles::make_local(env, result);
|
jobject res = JNIHandles::make_local(THREAD, result);
|
||||||
if (JvmtiExport::should_post_vm_object_alloc()) {
|
if (JvmtiExport::should_post_vm_object_alloc()) {
|
||||||
JvmtiExport::post_vm_object_alloc(JavaThread::current(), result);
|
JvmtiExport::post_vm_object_alloc(thread, result);
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
JVM_END
|
JVM_END
|
||||||
|
@ -3818,7 +3816,7 @@ JVM_ENTRY(jclass, JVM_LookupLambdaProxyClassFromArchive(JNIEnv* env,
|
||||||
jclass jcls = NULL;
|
jclass jcls = NULL;
|
||||||
if (lambda_ik != NULL) {
|
if (lambda_ik != NULL) {
|
||||||
InstanceKlass* loaded_lambda = SystemDictionaryShared::prepare_shared_lambda_proxy_class(lambda_ik, caller_ik, initialize, THREAD);
|
InstanceKlass* loaded_lambda = SystemDictionaryShared::prepare_shared_lambda_proxy_class(lambda_ik, caller_ik, initialize, THREAD);
|
||||||
jcls = loaded_lambda == NULL ? NULL : (jclass) JNIHandles::make_local(env, loaded_lambda->java_mirror());
|
jcls = loaded_lambda == NULL ? NULL : (jclass) JNIHandles::make_local(THREAD, loaded_lambda->java_mirror());
|
||||||
}
|
}
|
||||||
return jcls;
|
return jcls;
|
||||||
#else
|
#else
|
||||||
|
@ -3876,7 +3874,7 @@ JVM_ENTRY(jobjectArray, JVM_GetAllThreads(JNIEnv *env, jclass dummy))
|
||||||
threads_ah->obj_at_put(i, h());
|
threads_ah->obj_at_put(i, h());
|
||||||
}
|
}
|
||||||
|
|
||||||
return (jobjectArray) JNIHandles::make_local(env, threads_ah());
|
return (jobjectArray) JNIHandles::make_local(THREAD, threads_ah());
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -3918,7 +3916,7 @@ JVM_ENTRY(jobjectArray, JVM_DumpThreads(JNIEnv *env, jclass threadClass, jobject
|
||||||
// The JavaThread references in thread_handle_array are validated
|
// The JavaThread references in thread_handle_array are validated
|
||||||
// in VM_ThreadDump::doit().
|
// in VM_ThreadDump::doit().
|
||||||
Handle stacktraces = ThreadService::dump_stack_traces(thread_handle_array, num_threads, CHECK_NULL);
|
Handle stacktraces = ThreadService::dump_stack_traces(thread_handle_array, num_threads, CHECK_NULL);
|
||||||
return (jobjectArray)JNIHandles::make_local(env, stacktraces());
|
return (jobjectArray)JNIHandles::make_local(THREAD, stacktraces());
|
||||||
|
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
@ -3981,7 +3979,7 @@ JVM_ENTRY(jobjectArray, JVM_GetEnclosingMethodInfo(JNIEnv *env, jclass ofClass))
|
||||||
str = java_lang_String::create_from_symbol(sym, CHECK_NULL);
|
str = java_lang_String::create_from_symbol(sym, CHECK_NULL);
|
||||||
dest->obj_at_put(2, str());
|
dest->obj_at_put(2, str());
|
||||||
}
|
}
|
||||||
return (jobjectArray) JNIHandles::make_local(dest());
|
return (jobjectArray) JNIHandles::make_local(THREAD, dest());
|
||||||
}
|
}
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
@ -4011,7 +4009,7 @@ JVM_ENTRY(jobjectArray, JVM_GetVmArguments(JNIEnv *env))
|
||||||
Handle h = java_lang_String::create_from_platform_dependent_str(vm_args[i], CHECK_NULL);
|
Handle h = java_lang_String::create_from_platform_dependent_str(vm_args[i], CHECK_NULL);
|
||||||
result_h->obj_at_put(index, h());
|
result_h->obj_at_put(index, h());
|
||||||
}
|
}
|
||||||
return (jobjectArray) JNIHandles::make_local(env, result_h());
|
return (jobjectArray) JNIHandles::make_local(THREAD, result_h());
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
JVM_ENTRY_NO_ENV(jint, JVM_FindSignal(const char *name))
|
JVM_ENTRY_NO_ENV(jint, JVM_FindSignal(const char *name))
|
||||||
|
|
|
@ -179,7 +179,6 @@ Handle MethodHandles::resolve_MemberName_type(Handle mname, Klass* caller, TRAPS
|
||||||
oop MethodHandles::init_MemberName(Handle mname, Handle target, TRAPS) {
|
oop MethodHandles::init_MemberName(Handle mname, Handle target, TRAPS) {
|
||||||
// This method is used from java.lang.invoke.MemberName constructors.
|
// This method is used from java.lang.invoke.MemberName constructors.
|
||||||
// It fills in the new MemberName from a java.lang.reflect.Member.
|
// It fills in the new MemberName from a java.lang.reflect.Member.
|
||||||
Thread* thread = Thread::current();
|
|
||||||
oop target_oop = target();
|
oop target_oop = target();
|
||||||
Klass* target_klass = target_oop->klass();
|
Klass* target_klass = target_oop->klass();
|
||||||
if (target_klass == SystemDictionary::reflect_Field_klass()) {
|
if (target_klass == SystemDictionary::reflect_Field_klass()) {
|
||||||
|
@ -207,7 +206,7 @@ oop MethodHandles::init_MemberName(Handle mname, Handle target, TRAPS) {
|
||||||
if (m == NULL || is_signature_polymorphic(m->intrinsic_id()))
|
if (m == NULL || is_signature_polymorphic(m->intrinsic_id()))
|
||||||
return NULL; // do not resolve unless there is a concrete signature
|
return NULL; // do not resolve unless there is a concrete signature
|
||||||
CallInfo info(m, k, CHECK_NULL);
|
CallInfo info(m, k, CHECK_NULL);
|
||||||
return init_method_MemberName(mname, info);
|
return init_method_MemberName(mname, info, THREAD);
|
||||||
}
|
}
|
||||||
} else if (target_klass == SystemDictionary::reflect_Constructor_klass()) {
|
} else if (target_klass == SystemDictionary::reflect_Constructor_klass()) {
|
||||||
oop clazz = java_lang_reflect_Constructor::clazz(target_oop);
|
oop clazz = java_lang_reflect_Constructor::clazz(target_oop);
|
||||||
|
@ -217,13 +216,13 @@ oop MethodHandles::init_MemberName(Handle mname, Handle target, TRAPS) {
|
||||||
Method* m = InstanceKlass::cast(k)->method_with_idnum(slot);
|
Method* m = InstanceKlass::cast(k)->method_with_idnum(slot);
|
||||||
if (m == NULL) return NULL;
|
if (m == NULL) return NULL;
|
||||||
CallInfo info(m, k, CHECK_NULL);
|
CallInfo info(m, k, CHECK_NULL);
|
||||||
return init_method_MemberName(mname, info);
|
return init_method_MemberName(mname, info, THREAD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
oop MethodHandles::init_method_MemberName(Handle mname, CallInfo& info) {
|
oop MethodHandles::init_method_MemberName(Handle mname, CallInfo& info, TRAPS) {
|
||||||
assert(info.resolved_appendix().is_null(), "only normal methods here");
|
assert(info.resolved_appendix().is_null(), "only normal methods here");
|
||||||
methodHandle m(Thread::current(), info.resolved_method());
|
methodHandle m(Thread::current(), info.resolved_method());
|
||||||
assert(m.not_null(), "null method handle");
|
assert(m.not_null(), "null method handle");
|
||||||
|
@ -789,7 +788,7 @@ Handle MethodHandles::resolve_MemberName(Handle mname, Klass* caller,
|
||||||
THROW_MSG_(vmSymbols::java_lang_InternalError(), "appendix", empty);
|
THROW_MSG_(vmSymbols::java_lang_InternalError(), "appendix", empty);
|
||||||
}
|
}
|
||||||
result.set_resolved_method_name(CHECK_(empty));
|
result.set_resolved_method_name(CHECK_(empty));
|
||||||
oop mname2 = init_method_MemberName(mname, result);
|
oop mname2 = init_method_MemberName(mname, result, THREAD);
|
||||||
return Handle(THREAD, mname2);
|
return Handle(THREAD, mname2);
|
||||||
}
|
}
|
||||||
case IS_CONSTRUCTOR:
|
case IS_CONSTRUCTOR:
|
||||||
|
@ -812,7 +811,7 @@ Handle MethodHandles::resolve_MemberName(Handle mname, Klass* caller,
|
||||||
}
|
}
|
||||||
assert(result.is_statically_bound(), "");
|
assert(result.is_statically_bound(), "");
|
||||||
result.set_resolved_method_name(CHECK_(empty));
|
result.set_resolved_method_name(CHECK_(empty));
|
||||||
oop mname2 = init_method_MemberName(mname, result);
|
oop mname2 = init_method_MemberName(mname, result, THREAD);
|
||||||
return Handle(THREAD, mname2);
|
return Handle(THREAD, mname2);
|
||||||
}
|
}
|
||||||
case IS_FIELD:
|
case IS_FIELD:
|
||||||
|
@ -922,8 +921,6 @@ int MethodHandles::find_MemberNames(Klass* k,
|
||||||
int skip, objArrayHandle results, TRAPS) {
|
int skip, objArrayHandle results, TRAPS) {
|
||||||
// %%% take caller into account!
|
// %%% take caller into account!
|
||||||
|
|
||||||
Thread* thread = Thread::current();
|
|
||||||
|
|
||||||
if (k == NULL || !k->is_instance_klass()) return -1;
|
if (k == NULL || !k->is_instance_klass()) return -1;
|
||||||
|
|
||||||
int rfill = 0, rlimit = results->length(), rskip = skip;
|
int rfill = 0, rlimit = results->length(), rskip = skip;
|
||||||
|
@ -960,7 +957,7 @@ int MethodHandles::find_MemberNames(Klass* k,
|
||||||
if (rskip > 0) {
|
if (rskip > 0) {
|
||||||
--rskip;
|
--rskip;
|
||||||
} else if (rfill < rlimit) {
|
} else if (rfill < rlimit) {
|
||||||
Handle result(thread, results->obj_at(rfill++));
|
Handle result(THREAD, results->obj_at(rfill++));
|
||||||
if (!java_lang_invoke_MemberName::is_instance(result()))
|
if (!java_lang_invoke_MemberName::is_instance(result()))
|
||||||
return -99; // caller bug!
|
return -99; // caller bug!
|
||||||
oop saved = MethodHandles::init_field_MemberName(result, st.field_descriptor());
|
oop saved = MethodHandles::init_field_MemberName(result, st.field_descriptor());
|
||||||
|
@ -1011,11 +1008,11 @@ int MethodHandles::find_MemberNames(Klass* k,
|
||||||
if (rskip > 0) {
|
if (rskip > 0) {
|
||||||
--rskip;
|
--rskip;
|
||||||
} else if (rfill < rlimit) {
|
} else if (rfill < rlimit) {
|
||||||
Handle result(thread, results->obj_at(rfill++));
|
Handle result(THREAD, results->obj_at(rfill++));
|
||||||
if (!java_lang_invoke_MemberName::is_instance(result()))
|
if (!java_lang_invoke_MemberName::is_instance(result()))
|
||||||
return -99; // caller bug!
|
return -99; // caller bug!
|
||||||
CallInfo info(m, NULL, CHECK_0);
|
CallInfo info(m, NULL, CHECK_0);
|
||||||
oop saved = MethodHandles::init_method_MemberName(result, info);
|
oop saved = MethodHandles::init_method_MemberName(result, info, THREAD);
|
||||||
if (saved != result())
|
if (saved != result())
|
||||||
results->obj_at_put(rfill-1, saved); // show saved instance to user
|
results->obj_at_put(rfill-1, saved); // show saved instance to user
|
||||||
} else if (++overflow >= overflow_limit) {
|
} else if (++overflow >= overflow_limit) {
|
||||||
|
@ -1302,7 +1299,7 @@ JVM_ENTRY(jobject, MHN_getMemberVMInfo(JNIEnv *env, jobject igcls, jobject mname
|
||||||
x = mname();
|
x = mname();
|
||||||
}
|
}
|
||||||
result->obj_at_put(1, x);
|
result->obj_at_put(1, x);
|
||||||
return JNIHandles::make_local(env, result());
|
return JNIHandles::make_local(THREAD, result());
|
||||||
}
|
}
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
@ -1550,7 +1547,7 @@ JVM_ENTRY(void, JVM_RegisterMethodHandleMethods(JNIEnv *env, jclass MHN_class))
|
||||||
assert(SystemDictionary::MethodHandle_klass() != NULL, "should be present");
|
assert(SystemDictionary::MethodHandle_klass() != NULL, "should be present");
|
||||||
|
|
||||||
oop mirror = SystemDictionary::MethodHandle_klass()->java_mirror();
|
oop mirror = SystemDictionary::MethodHandle_klass()->java_mirror();
|
||||||
jclass MH_class = (jclass) JNIHandles::make_local(env, mirror);
|
jclass MH_class = (jclass) JNIHandles::make_local(THREAD, mirror);
|
||||||
|
|
||||||
{
|
{
|
||||||
ThreadToNativeFromVM ttnfv(thread);
|
ThreadToNativeFromVM ttnfv(thread);
|
||||||
|
|
|
@ -65,7 +65,7 @@ class MethodHandles: AllStatic {
|
||||||
static void expand_MemberName(Handle mname, int suppress, TRAPS); // expand defc/name/type if missing
|
static void expand_MemberName(Handle mname, int suppress, TRAPS); // expand defc/name/type if missing
|
||||||
static oop init_MemberName(Handle mname_h, Handle target_h, TRAPS); // compute vmtarget/vmindex from target
|
static oop init_MemberName(Handle mname_h, Handle target_h, TRAPS); // compute vmtarget/vmindex from target
|
||||||
static oop init_field_MemberName(Handle mname_h, fieldDescriptor& fd, bool is_setter = false);
|
static oop init_field_MemberName(Handle mname_h, fieldDescriptor& fd, bool is_setter = false);
|
||||||
static oop init_method_MemberName(Handle mname_h, CallInfo& info);
|
static oop init_method_MemberName(Handle mname_h, CallInfo& info, TRAPS);
|
||||||
static int find_MemberNames(Klass* k, Symbol* name, Symbol* sig,
|
static int find_MemberNames(Klass* k, Symbol* name, Symbol* sig,
|
||||||
int mflags, Klass* caller,
|
int mflags, Klass* caller,
|
||||||
int skip, objArrayHandle results, TRAPS);
|
int skip, objArrayHandle results, TRAPS);
|
||||||
|
|
|
@ -265,7 +265,7 @@ UNSAFE_ENTRY(jobject, Unsafe_GetReference(JNIEnv *env, jobject unsafe, jobject o
|
||||||
oop p = JNIHandles::resolve(obj);
|
oop p = JNIHandles::resolve(obj);
|
||||||
assert_field_offset_sane(p, offset);
|
assert_field_offset_sane(p, offset);
|
||||||
oop v = HeapAccess<ON_UNKNOWN_OOP_REF>::oop_load_at(p, offset);
|
oop v = HeapAccess<ON_UNKNOWN_OOP_REF>::oop_load_at(p, offset);
|
||||||
return JNIHandles::make_local(env, v);
|
return JNIHandles::make_local(THREAD, v);
|
||||||
} UNSAFE_END
|
} UNSAFE_END
|
||||||
|
|
||||||
UNSAFE_ENTRY(void, Unsafe_PutReference(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
|
UNSAFE_ENTRY(void, Unsafe_PutReference(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
|
||||||
|
@ -279,7 +279,7 @@ UNSAFE_ENTRY(jobject, Unsafe_GetReferenceVolatile(JNIEnv *env, jobject unsafe, j
|
||||||
oop p = JNIHandles::resolve(obj);
|
oop p = JNIHandles::resolve(obj);
|
||||||
assert_field_offset_sane(p, offset);
|
assert_field_offset_sane(p, offset);
|
||||||
oop v = HeapAccess<MO_SEQ_CST | ON_UNKNOWN_OOP_REF>::oop_load_at(p, offset);
|
oop v = HeapAccess<MO_SEQ_CST | ON_UNKNOWN_OOP_REF>::oop_load_at(p, offset);
|
||||||
return JNIHandles::make_local(env, v);
|
return JNIHandles::make_local(THREAD, v);
|
||||||
} UNSAFE_END
|
} UNSAFE_END
|
||||||
|
|
||||||
UNSAFE_ENTRY(void, Unsafe_PutReferenceVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
|
UNSAFE_ENTRY(void, Unsafe_PutReferenceVolatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) {
|
||||||
|
@ -291,7 +291,7 @@ UNSAFE_ENTRY(void, Unsafe_PutReferenceVolatile(JNIEnv *env, jobject unsafe, jobj
|
||||||
|
|
||||||
UNSAFE_ENTRY(jobject, Unsafe_GetUncompressedObject(JNIEnv *env, jobject unsafe, jlong addr)) {
|
UNSAFE_ENTRY(jobject, Unsafe_GetUncompressedObject(JNIEnv *env, jobject unsafe, jlong addr)) {
|
||||||
oop v = *(oop*) (address) addr;
|
oop v = *(oop*) (address) addr;
|
||||||
return JNIHandles::make_local(env, v);
|
return JNIHandles::make_local(THREAD, v);
|
||||||
} UNSAFE_END
|
} UNSAFE_END
|
||||||
|
|
||||||
#define DEFINE_GETSETOOP(java_type, Type) \
|
#define DEFINE_GETSETOOP(java_type, Type) \
|
||||||
|
@ -356,7 +356,7 @@ UNSAFE_LEAF(void, Unsafe_FullFence(JNIEnv *env, jobject unsafe)) {
|
||||||
|
|
||||||
UNSAFE_ENTRY(jobject, Unsafe_AllocateInstance(JNIEnv *env, jobject unsafe, jclass cls)) {
|
UNSAFE_ENTRY(jobject, Unsafe_AllocateInstance(JNIEnv *env, jobject unsafe, jclass cls)) {
|
||||||
instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(cls), CHECK_NULL);
|
instanceOop i = InstanceKlass::allocate_instance(JNIHandles::resolve_non_null(cls), CHECK_NULL);
|
||||||
return JNIHandles::make_local(env, i);
|
return JNIHandles::make_local(THREAD, i);
|
||||||
} UNSAFE_END
|
} UNSAFE_END
|
||||||
|
|
||||||
UNSAFE_ENTRY(jlong, Unsafe_AllocateMemory0(JNIEnv *env, jobject unsafe, jlong size)) {
|
UNSAFE_ENTRY(jlong, Unsafe_AllocateMemory0(JNIEnv *env, jobject unsafe, jlong size)) {
|
||||||
|
@ -565,7 +565,7 @@ UNSAFE_ENTRY(jobject, Unsafe_StaticFieldBase0(JNIEnv *env, jobject unsafe, jobje
|
||||||
THROW_0(vmSymbols::java_lang_IllegalArgumentException());
|
THROW_0(vmSymbols::java_lang_IllegalArgumentException());
|
||||||
}
|
}
|
||||||
|
|
||||||
return JNIHandles::make_local(env, mirror);
|
return JNIHandles::make_local(THREAD, mirror);
|
||||||
} UNSAFE_END
|
} UNSAFE_END
|
||||||
|
|
||||||
UNSAFE_ENTRY(void, Unsafe_EnsureClassInitialized0(JNIEnv *env, jobject unsafe, jobject clazz)) {
|
UNSAFE_ENTRY(void, Unsafe_EnsureClassInitialized0(JNIEnv *env, jobject unsafe, jobject clazz)) {
|
||||||
|
@ -881,7 +881,7 @@ UNSAFE_ENTRY(jclass, Unsafe_DefineAnonymousClass0(JNIEnv *env, jobject unsafe, j
|
||||||
|
|
||||||
InstanceKlass* anon_klass = Unsafe_DefineAnonymousClass_impl(env, host_class, data, cp_patches_jh, &temp_alloc, THREAD);
|
InstanceKlass* anon_klass = Unsafe_DefineAnonymousClass_impl(env, host_class, data, cp_patches_jh, &temp_alloc, THREAD);
|
||||||
if (anon_klass != NULL) {
|
if (anon_klass != NULL) {
|
||||||
res_jh = JNIHandles::make_local(env, anon_klass->java_mirror());
|
res_jh = JNIHandles::make_local(THREAD, anon_klass->java_mirror());
|
||||||
}
|
}
|
||||||
|
|
||||||
// try/finally clause:
|
// try/finally clause:
|
||||||
|
@ -914,7 +914,7 @@ UNSAFE_ENTRY(jobject, Unsafe_CompareAndExchangeReference(JNIEnv *env, jobject un
|
||||||
oop p = JNIHandles::resolve(obj);
|
oop p = JNIHandles::resolve(obj);
|
||||||
assert_field_offset_sane(p, offset);
|
assert_field_offset_sane(p, offset);
|
||||||
oop res = HeapAccess<ON_UNKNOWN_OOP_REF>::oop_atomic_cmpxchg_at(p, (ptrdiff_t)offset, e, x);
|
oop res = HeapAccess<ON_UNKNOWN_OOP_REF>::oop_atomic_cmpxchg_at(p, (ptrdiff_t)offset, e, x);
|
||||||
return JNIHandles::make_local(env, res);
|
return JNIHandles::make_local(THREAD, res);
|
||||||
} UNSAFE_END
|
} UNSAFE_END
|
||||||
|
|
||||||
UNSAFE_ENTRY(jint, Unsafe_CompareAndExchangeInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x)) {
|
UNSAFE_ENTRY(jint, Unsafe_CompareAndExchangeInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x)) {
|
||||||
|
|
|
@ -631,7 +631,7 @@ WB_ENTRY(jobject, WB_G1AuxiliaryMemoryUsage(JNIEnv* env))
|
||||||
G1CollectedHeap* g1h = G1CollectedHeap::heap();
|
G1CollectedHeap* g1h = G1CollectedHeap::heap();
|
||||||
MemoryUsage usage = g1h->get_auxiliary_data_memory_usage();
|
MemoryUsage usage = g1h->get_auxiliary_data_memory_usage();
|
||||||
Handle h = MemoryService::create_MemoryUsage_obj(usage, CHECK_NULL);
|
Handle h = MemoryService::create_MemoryUsage_obj(usage, CHECK_NULL);
|
||||||
return JNIHandles::make_local(env, h());
|
return JNIHandles::make_local(THREAD, h());
|
||||||
}
|
}
|
||||||
THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1AuxiliaryMemoryUsage: G1 GC is not enabled");
|
THROW_MSG_0(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1AuxiliaryMemoryUsage: G1 GC is not enabled");
|
||||||
WB_END
|
WB_END
|
||||||
|
@ -654,7 +654,7 @@ WB_ENTRY(jintArray, WB_G1MemoryNodeIds(JNIEnv* env, jobject o))
|
||||||
for (int i = 0; i < num_node_ids; i++) {
|
for (int i = 0; i < num_node_ids; i++) {
|
||||||
result->int_at_put(i, (jint)node_ids[i]);
|
result->int_at_put(i, (jint)node_ids[i]);
|
||||||
}
|
}
|
||||||
return (jintArray) JNIHandles::make_local(env, result);
|
return (jintArray) JNIHandles::make_local(THREAD, result);
|
||||||
}
|
}
|
||||||
THROW_MSG_NULL(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1MemoryNodeIds: G1 GC is not enabled");
|
THROW_MSG_NULL(vmSymbols::java_lang_UnsupportedOperationException(), "WB_G1MemoryNodeIds: G1 GC is not enabled");
|
||||||
WB_END
|
WB_END
|
||||||
|
@ -715,7 +715,7 @@ WB_ENTRY(jlongArray, WB_G1GetMixedGCInfo(JNIEnv* env, jobject o, jint liveness))
|
||||||
result->long_at_put(0, rli.total_count());
|
result->long_at_put(0, rli.total_count());
|
||||||
result->long_at_put(1, rli.total_memory());
|
result->long_at_put(1, rli.total_memory());
|
||||||
result->long_at_put(2, rli.total_memory_to_free());
|
result->long_at_put(2, rli.total_memory_to_free());
|
||||||
return (jlongArray) JNIHandles::make_local(env, result);
|
return (jlongArray) JNIHandles::make_local(THREAD, result);
|
||||||
WB_END
|
WB_END
|
||||||
|
|
||||||
#endif // INCLUDE_G1GC
|
#endif // INCLUDE_G1GC
|
||||||
|
@ -1678,12 +1678,11 @@ WB_ENTRY(jlong, WB_GetMethodData(JNIEnv* env, jobject wv, jobject method))
|
||||||
WB_END
|
WB_END
|
||||||
|
|
||||||
WB_ENTRY(jlong, WB_GetThreadStackSize(JNIEnv* env, jobject o))
|
WB_ENTRY(jlong, WB_GetThreadStackSize(JNIEnv* env, jobject o))
|
||||||
return (jlong) Thread::current()->stack_size();
|
return (jlong) thread->stack_size();
|
||||||
WB_END
|
WB_END
|
||||||
|
|
||||||
WB_ENTRY(jlong, WB_GetThreadRemainingStackSize(JNIEnv* env, jobject o))
|
WB_ENTRY(jlong, WB_GetThreadRemainingStackSize(JNIEnv* env, jobject o))
|
||||||
JavaThread* t = JavaThread::current();
|
return (jlong) thread->stack_available(os::current_stack_pointer()) - (jlong)JavaThread::stack_shadow_zone_size();
|
||||||
return (jlong) t->stack_available(os::current_stack_pointer()) - (jlong)JavaThread::stack_shadow_zone_size();
|
|
||||||
WB_END
|
WB_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -1790,7 +1789,7 @@ WB_ENTRY(void, WB_AssertSpecialLock(JNIEnv* env, jobject o, jboolean allowVMBloc
|
||||||
|
|
||||||
MutexLocker ml(new Mutex(Mutex::special, "SpecialTest_lock", allowVMBlock, sfpt_check_required), safepoint_check);
|
MutexLocker ml(new Mutex(Mutex::special, "SpecialTest_lock", allowVMBlock, sfpt_check_required), safepoint_check);
|
||||||
// If the lock above succeeds, try to safepoint to test the NSV implied with this special lock.
|
// If the lock above succeeds, try to safepoint to test the NSV implied with this special lock.
|
||||||
ThreadBlockInVM tbivm(JavaThread::current());
|
ThreadBlockInVM tbivm(thread);
|
||||||
WB_END
|
WB_END
|
||||||
|
|
||||||
WB_ENTRY(jboolean, WB_IsMonitorInflated(JNIEnv* env, jobject wb, jobject obj))
|
WB_ENTRY(jboolean, WB_IsMonitorInflated(JNIEnv* env, jobject wb, jobject obj))
|
||||||
|
@ -1957,7 +1956,7 @@ WB_ENTRY(jobject, WB_GetResolvedReferences(JNIEnv* env, jobject wb, jclass clazz
|
||||||
InstanceKlass *ik = InstanceKlass::cast(k);
|
InstanceKlass *ik = InstanceKlass::cast(k);
|
||||||
ConstantPool *cp = ik->constants();
|
ConstantPool *cp = ik->constants();
|
||||||
objArrayOop refs = cp->resolved_references();
|
objArrayOop refs = cp->resolved_references();
|
||||||
return (jobject)JNIHandles::make_local(env, refs);
|
return (jobject)JNIHandles::make_local(THREAD, refs);
|
||||||
} else {
|
} else {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,19 +55,10 @@ void jni_handles_init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
jobject JNIHandles::make_local(oop obj) {
|
jobject JNIHandles::make_local(oop obj) {
|
||||||
if (obj == NULL) {
|
return make_local(Thread::current(), obj);
|
||||||
return NULL; // ignore null handles
|
|
||||||
} else {
|
|
||||||
Thread* thread = Thread::current();
|
|
||||||
assert(oopDesc::is_oop(obj), "not an oop");
|
|
||||||
assert(!current_thread_in_native(), "must not be in native");
|
|
||||||
return thread->active_handles()->allocate_handle(obj);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// optimized versions
|
|
||||||
|
|
||||||
jobject JNIHandles::make_local(Thread* thread, oop obj) {
|
jobject JNIHandles::make_local(Thread* thread, oop obj) {
|
||||||
if (obj == NULL) {
|
if (obj == NULL) {
|
||||||
return NULL; // ignore null handles
|
return NULL; // ignore null handles
|
||||||
|
@ -79,19 +70,6 @@ jobject JNIHandles::make_local(Thread* thread, oop obj) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
jobject JNIHandles::make_local(JNIEnv* env, oop obj) {
|
|
||||||
if (obj == NULL) {
|
|
||||||
return NULL; // ignore null handles
|
|
||||||
} else {
|
|
||||||
JavaThread* thread = JavaThread::thread_from_jni_environment(env);
|
|
||||||
assert(oopDesc::is_oop(obj), "not an oop");
|
|
||||||
assert(!current_thread_in_native(), "must not be in native");
|
|
||||||
return thread->active_handles()->allocate_handle(obj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void report_handle_allocation_failure(AllocFailType alloc_failmode,
|
static void report_handle_allocation_failure(AllocFailType alloc_failmode,
|
||||||
const char* handle_kind) {
|
const char* handle_kind) {
|
||||||
if (alloc_failmode == AllocFailStrategy::EXIT_OOM) {
|
if (alloc_failmode == AllocFailStrategy::EXIT_OOM) {
|
||||||
|
|
|
@ -84,8 +84,7 @@ class JNIHandles : AllStatic {
|
||||||
|
|
||||||
// Local handles
|
// Local handles
|
||||||
static jobject make_local(oop obj);
|
static jobject make_local(oop obj);
|
||||||
static jobject make_local(JNIEnv* env, oop obj); // Fast version when env is known
|
static jobject make_local(Thread* thread, oop obj); // Faster version when current thread is known
|
||||||
static jobject make_local(Thread* thread, oop obj); // Even faster version when current thread is known
|
|
||||||
inline static void destroy_local(jobject handle);
|
inline static void destroy_local(jobject handle);
|
||||||
|
|
||||||
// Global handles
|
// Global handles
|
||||||
|
|
|
@ -508,7 +508,7 @@ JVM_ENTRY(jobjectArray, jmm_GetMemoryPools(JNIEnv* env, jobject obj))
|
||||||
poolArray->obj_at_put(i, ph());
|
poolArray->obj_at_put(i, ph());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (jobjectArray) JNIHandles::make_local(env, poolArray());
|
return (jobjectArray) JNIHandles::make_local(THREAD, poolArray());
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
// Returns an array of java/lang/management/MemoryManagerMXBean object
|
// Returns an array of java/lang/management/MemoryManagerMXBean object
|
||||||
|
@ -552,7 +552,7 @@ JVM_ENTRY(jobjectArray, jmm_GetMemoryManagers(JNIEnv* env, jobject obj))
|
||||||
mgrArray->obj_at_put(i, ph());
|
mgrArray->obj_at_put(i, ph());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (jobjectArray) JNIHandles::make_local(env, mgrArray());
|
return (jobjectArray) JNIHandles::make_local(THREAD, mgrArray());
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -565,7 +565,7 @@ JVM_ENTRY(jobject, jmm_GetMemoryPoolUsage(JNIEnv* env, jobject obj))
|
||||||
if (pool != NULL) {
|
if (pool != NULL) {
|
||||||
MemoryUsage usage = pool->get_memory_usage();
|
MemoryUsage usage = pool->get_memory_usage();
|
||||||
Handle h = MemoryService::create_MemoryUsage_obj(usage, CHECK_NULL);
|
Handle h = MemoryService::create_MemoryUsage_obj(usage, CHECK_NULL);
|
||||||
return JNIHandles::make_local(env, h());
|
return JNIHandles::make_local(THREAD, h());
|
||||||
} else {
|
} else {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -580,7 +580,7 @@ JVM_ENTRY(jobject, jmm_GetPeakMemoryPoolUsage(JNIEnv* env, jobject obj))
|
||||||
if (pool != NULL) {
|
if (pool != NULL) {
|
||||||
MemoryUsage usage = pool->get_peak_memory_usage();
|
MemoryUsage usage = pool->get_peak_memory_usage();
|
||||||
Handle h = MemoryService::create_MemoryUsage_obj(usage, CHECK_NULL);
|
Handle h = MemoryService::create_MemoryUsage_obj(usage, CHECK_NULL);
|
||||||
return JNIHandles::make_local(env, h());
|
return JNIHandles::make_local(THREAD, h());
|
||||||
} else {
|
} else {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -595,7 +595,7 @@ JVM_ENTRY(jobject, jmm_GetPoolCollectionUsage(JNIEnv* env, jobject obj))
|
||||||
if (pool != NULL && pool->is_collected_pool()) {
|
if (pool != NULL && pool->is_collected_pool()) {
|
||||||
MemoryUsage usage = pool->get_last_collection_usage();
|
MemoryUsage usage = pool->get_last_collection_usage();
|
||||||
Handle h = MemoryService::create_MemoryUsage_obj(usage, CHECK_NULL);
|
Handle h = MemoryService::create_MemoryUsage_obj(usage, CHECK_NULL);
|
||||||
return JNIHandles::make_local(env, h());
|
return JNIHandles::make_local(THREAD, h());
|
||||||
} else {
|
} else {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -759,7 +759,7 @@ JVM_ENTRY(jobject, jmm_GetMemoryUsage(JNIEnv* env, jboolean heap))
|
||||||
}
|
}
|
||||||
|
|
||||||
Handle obj = MemoryService::create_MemoryUsage_obj(usage, CHECK_NULL);
|
Handle obj = MemoryService::create_MemoryUsage_obj(usage, CHECK_NULL);
|
||||||
return JNIHandles::make_local(env, obj());
|
return JNIHandles::make_local(THREAD, obj());
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
// Returns the boolean value of a given attribute.
|
// Returns the boolean value of a given attribute.
|
||||||
|
@ -1274,7 +1274,7 @@ JVM_ENTRY(jobjectArray, jmm_DumpThreads(JNIEnv *env, jlongArray thread_ids, jboo
|
||||||
result_h->obj_at_put(index, info_obj);
|
result_h->obj_at_put(index, info_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (jobjectArray) JNIHandles::make_local(env, result_h());
|
return (jobjectArray) JNIHandles::make_local(THREAD, result_h());
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
// Reset statistic. Return true if the requested statistic is reset.
|
// Reset statistic. Return true if the requested statistic is reset.
|
||||||
|
@ -1420,23 +1420,23 @@ JVM_ENTRY(jobjectArray, jmm_GetVMGlobalNames(JNIEnv *env))
|
||||||
for(int i = 0; i < num_entries; i++) {
|
for(int i = 0; i < num_entries; i++) {
|
||||||
res->obj_at_put(i, flags_ah->obj_at(i));
|
res->obj_at_put(i, flags_ah->obj_at(i));
|
||||||
}
|
}
|
||||||
return (jobjectArray)JNIHandles::make_local(env, res);
|
return (jobjectArray)JNIHandles::make_local(THREAD, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (jobjectArray)JNIHandles::make_local(env, flags_ah());
|
return (jobjectArray)JNIHandles::make_local(THREAD, flags_ah());
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
// Utility function used by jmm_GetVMGlobals. Returns false if flag type
|
// Utility function used by jmm_GetVMGlobals. Returns false if flag type
|
||||||
// can't be determined, true otherwise. If false is returned, then *global
|
// can't be determined, true otherwise. If false is returned, then *global
|
||||||
// will be incomplete and invalid.
|
// will be incomplete and invalid.
|
||||||
bool add_global_entry(JNIEnv* env, Handle name, jmmVMGlobal *global, JVMFlag *flag, TRAPS) {
|
bool add_global_entry(Handle name, jmmVMGlobal *global, JVMFlag *flag, TRAPS) {
|
||||||
Handle flag_name;
|
Handle flag_name;
|
||||||
if (name() == NULL) {
|
if (name() == NULL) {
|
||||||
flag_name = java_lang_String::create_from_str(flag->_name, CHECK_false);
|
flag_name = java_lang_String::create_from_str(flag->_name, CHECK_false);
|
||||||
} else {
|
} else {
|
||||||
flag_name = name;
|
flag_name = name;
|
||||||
}
|
}
|
||||||
global->name = (jstring)JNIHandles::make_local(env, flag_name());
|
global->name = (jstring)JNIHandles::make_local(THREAD, flag_name());
|
||||||
|
|
||||||
if (flag->is_bool()) {
|
if (flag->is_bool()) {
|
||||||
global->value.z = flag->get_bool() ? JNI_TRUE : JNI_FALSE;
|
global->value.z = flag->get_bool() ? JNI_TRUE : JNI_FALSE;
|
||||||
|
@ -1464,7 +1464,7 @@ bool add_global_entry(JNIEnv* env, Handle name, jmmVMGlobal *global, JVMFlag *fl
|
||||||
global->type = JMM_VMGLOBAL_TYPE_JLONG;
|
global->type = JMM_VMGLOBAL_TYPE_JLONG;
|
||||||
} else if (flag->is_ccstr()) {
|
} else if (flag->is_ccstr()) {
|
||||||
Handle str = java_lang_String::create_from_str(flag->get_ccstr(), CHECK_false);
|
Handle str = java_lang_String::create_from_str(flag->get_ccstr(), CHECK_false);
|
||||||
global->value.l = (jobject)JNIHandles::make_local(env, str());
|
global->value.l = (jobject)JNIHandles::make_local(THREAD, str());
|
||||||
global->type = JMM_VMGLOBAL_TYPE_JSTRING;
|
global->type = JMM_VMGLOBAL_TYPE_JSTRING;
|
||||||
} else {
|
} else {
|
||||||
global->type = JMM_VMGLOBAL_TYPE_UNKNOWN;
|
global->type = JMM_VMGLOBAL_TYPE_UNKNOWN;
|
||||||
|
@ -1543,7 +1543,7 @@ JVM_ENTRY(jint, jmm_GetVMGlobals(JNIEnv *env,
|
||||||
char* str = java_lang_String::as_utf8_string(s);
|
char* str = java_lang_String::as_utf8_string(s);
|
||||||
JVMFlag* flag = JVMFlag::find_flag(str);
|
JVMFlag* flag = JVMFlag::find_flag(str);
|
||||||
if (flag != NULL &&
|
if (flag != NULL &&
|
||||||
add_global_entry(env, sh, &globals[i], flag, THREAD)) {
|
add_global_entry(sh, &globals[i], flag, THREAD)) {
|
||||||
num_entries++;
|
num_entries++;
|
||||||
} else {
|
} else {
|
||||||
globals[i].name = NULL;
|
globals[i].name = NULL;
|
||||||
|
@ -1565,7 +1565,7 @@ JVM_ENTRY(jint, jmm_GetVMGlobals(JNIEnv *env,
|
||||||
}
|
}
|
||||||
// Exclude the locked (diagnostic, experimental) flags
|
// Exclude the locked (diagnostic, experimental) flags
|
||||||
if ((flag->is_unlocked() || flag->is_unlocker()) &&
|
if ((flag->is_unlocked() || flag->is_unlocker()) &&
|
||||||
add_global_entry(env, null_h, &globals[num_entries], flag, THREAD)) {
|
add_global_entry(null_h, &globals[num_entries], flag, THREAD)) {
|
||||||
num_entries++;
|
num_entries++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1750,7 +1750,7 @@ static Handle find_deadlocks(bool object_monitors_only, TRAPS) {
|
||||||
//
|
//
|
||||||
JVM_ENTRY(jobjectArray, jmm_FindDeadlockedThreads(JNIEnv *env, jboolean object_monitors_only))
|
JVM_ENTRY(jobjectArray, jmm_FindDeadlockedThreads(JNIEnv *env, jboolean object_monitors_only))
|
||||||
Handle result = find_deadlocks(object_monitors_only != 0, CHECK_NULL);
|
Handle result = find_deadlocks(object_monitors_only != 0, CHECK_NULL);
|
||||||
return (jobjectArray) JNIHandles::make_local(env, result());
|
return (jobjectArray) JNIHandles::make_local(THREAD, result());
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
// Finds cycles of threads that are deadlocked on monitor locks
|
// Finds cycles of threads that are deadlocked on monitor locks
|
||||||
|
@ -1758,7 +1758,7 @@ JVM_END
|
||||||
// Otherwise, returns NULL.
|
// Otherwise, returns NULL.
|
||||||
JVM_ENTRY(jobjectArray, jmm_FindMonitorDeadlockedThreads(JNIEnv *env))
|
JVM_ENTRY(jobjectArray, jmm_FindMonitorDeadlockedThreads(JNIEnv *env))
|
||||||
Handle result = find_deadlocks(true, CHECK_NULL);
|
Handle result = find_deadlocks(true, CHECK_NULL);
|
||||||
return (jobjectArray) JNIHandles::make_local(env, result());
|
return (jobjectArray) JNIHandles::make_local(THREAD, result());
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
// Gets the information about GC extension attributes including
|
// Gets the information about GC extension attributes including
|
||||||
|
@ -1940,7 +1940,7 @@ JVM_ENTRY(jobjectArray, jmm_GetDiagnosticCommands(JNIEnv *env))
|
||||||
oop cmd_name = java_lang_String::create_oop_from_str(dcmd_list->at(i), CHECK_NULL);
|
oop cmd_name = java_lang_String::create_oop_from_str(dcmd_list->at(i), CHECK_NULL);
|
||||||
cmd_array->obj_at_put(i, cmd_name);
|
cmd_array->obj_at_put(i, cmd_name);
|
||||||
}
|
}
|
||||||
return (jobjectArray) JNIHandles::make_local(env, cmd_array());
|
return (jobjectArray) JNIHandles::make_local(THREAD, cmd_array());
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
JVM_ENTRY(void, jmm_GetDiagnosticCommandInfo(JNIEnv *env, jobjectArray cmds,
|
JVM_ENTRY(void, jmm_GetDiagnosticCommandInfo(JNIEnv *env, jobjectArray cmds,
|
||||||
|
@ -2049,7 +2049,7 @@ JVM_ENTRY(jstring, jmm_ExecuteDiagnosticCommand(JNIEnv *env, jstring commandline
|
||||||
bufferedStream output;
|
bufferedStream output;
|
||||||
DCmd::parse_and_execute(DCmd_Source_MBean, &output, cmdline, ' ', CHECK_NULL);
|
DCmd::parse_and_execute(DCmd_Source_MBean, &output, cmdline, ' ', CHECK_NULL);
|
||||||
oop result = java_lang_String::create_oop_from_str(output.as_string(), CHECK_NULL);
|
oop result = java_lang_String::create_oop_from_str(output.as_string(), CHECK_NULL);
|
||||||
return (jstring) JNIHandles::make_local(env, result);
|
return (jstring) JNIHandles::make_local(THREAD, result);
|
||||||
JVM_END
|
JVM_END
|
||||||
|
|
||||||
JVM_ENTRY(void, jmm_SetDiagnosticFrameworkNotificationEnabled(JNIEnv *env, jboolean enabled))
|
JVM_ENTRY(void, jmm_SetDiagnosticFrameworkNotificationEnabled(JNIEnv *env, jboolean enabled))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue