--- old/src/hotspot/share/prims/jvm.cpp 2020-07-20 01:45:29.041338364 -0400 +++ new/src/hotspot/share/prims/jvm.cpp 2020-07-20 01:45:27.922325084 -0400 @@ -1,3 +1,4 @@ + /* * Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -141,7 +142,7 @@ const char * source_file = NULL; const char * trace = "explicit"; InstanceKlass* caller = NULL; - JavaThread* jthread = JavaThread::current(); + JavaThread* jthread = (JavaThread*) THREAD; if (jthread->has_last_Java_frame()) { vframeStream vfst(jthread); @@ -447,7 +448,7 @@ } } - return (jobjectArray) JNIHandles::make_local(env, result_h()); + return (jobjectArray) JNIHandles::make_local(THREAD, result_h()); JVM_END @@ -464,7 +465,7 @@ HandleMark hm(THREAD); const char* temp_dir = os::get_temp_directory(); 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 @@ -568,7 +569,7 @@ bool ok = BytecodeUtils::get_NPE_message_at(&ss, method, bci); if (ok) { 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 { return NULL; } @@ -622,7 +623,7 @@ oop result = StackWalk::walk(stackStream_h, mode, skip_frames, frame_count, start_index, frames_array_h, CHECK_NULL); - return JNIHandles::make_local(env, result); + return JNIHandles::make_local(THREAD, result); JVM_END @@ -738,7 +739,7 @@ new_obj = Handle(THREAD, new_obj_oop); } - return JNIHandles::make_local(env, new_obj()); + return JNIHandles::make_local(THREAD, new_obj()); JVM_END // java.io.File /////////////////////////////////////////////////////////////// @@ -784,7 +785,7 @@ default: if (!m->is_ignored_by_security_stack_walk()) { // 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; } @@ -803,7 +804,7 @@ if (mirror == NULL) { THROW_MSG_0(vmSymbols::java_lang_ClassNotFoundException(), (char*) utf); } else { - return (jclass) JNIHandles::make_local(env, mirror); + return (jclass) JNIHandles::make_local(THREAD, mirror); } JVM_END @@ -832,7 +833,7 @@ if (log_is_enabled(Debug, class, resolve)) { trace_class_resolution(k); } - return (jclass) JNIHandles::make_local(env, k->java_mirror()); + return (jclass) JNIHandles::make_local(THREAD, k->java_mirror()); JVM_END // Find a class with this name in this loader, using the caller's protection domain. @@ -920,7 +921,7 @@ } // 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, jsize len, jobject pd, const char *source, TRAPS) { @@ -964,7 +965,7 @@ trace_class_resolution(k); } - return (jclass) JNIHandles::make_local(env, k->java_mirror()); + return (jclass) JNIHandles::make_local(THREAD, k->java_mirror()); } enum { @@ -978,7 +979,7 @@ * Define a class with the specified flags that indicates if it's a nestmate, * 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, jboolean init, int flags, jobject classData, TRAPS) { assert(THREAD->is_Java_thread(), "must be a JavaThread"); @@ -1099,13 +1100,13 @@ 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)) 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 /* @@ -1129,13 +1130,13 @@ 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_ENTRY(jclass, JVM_DefineClassWithSource(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd, const char *source)) 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_ENTRY(jclass, JVM_FindLoadedClass(JNIEnv *env, jobject loader, jstring name)) @@ -1187,7 +1188,7 @@ } #endif return (k == NULL) ? NULL : - (jclass) JNIHandles::make_local(env, k->java_mirror()); + (jclass) JNIHandles::make_local(THREAD, k->java_mirror()); JVM_END // Module support ////////////////////////////////////////////////////////////////////////////// @@ -1233,7 +1234,7 @@ HandleMark hm(THREAD); Handle java_class(THREAD, JNIHandles::resolve(cls)); 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 @@ -1246,7 +1247,7 @@ if (java_lang_Class::is_primitive(mirror)) { // Primitive objects does not have any interfaces 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); @@ -1274,7 +1275,7 @@ result->obj_at_put(0, SystemDictionary::Cloneable_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 @@ -1325,7 +1326,7 @@ } // return the copy - return (jobjectArray) JNIHandles::make_local(env, signers_copy); + return (jobjectArray) JNIHandles::make_local(THREAD, signers_copy); JVM_END @@ -1355,7 +1356,7 @@ } 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 @@ -1363,7 +1364,7 @@ JVM_ENTRY(jobject, JVM_GetInheritedAccessControlContext(JNIEnv *env, jclass cls)) JVMWrapper("JVM_GetInheritedAccessControlContext"); 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 class RegisterArrayForGC { @@ -1442,7 +1443,7 @@ if (is_privileged && privileged_context.is_null()) return 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 @@ -1456,7 +1457,7 @@ 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 @@ -1498,7 +1499,7 @@ if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || ! java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_instance_klass()) { 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))); @@ -1507,7 +1508,7 @@ if (iter.length() == 0) { // Neither an inner nor outer class 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 @@ -1549,10 +1550,10 @@ for(int i = 0; i < members; 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 @@ -1570,7 +1571,7 @@ )->compute_enclosing_class(&inner_is_member, CHECK_NULL); 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) - return (jclass) JNIHandles::make_local(env, outer_klass->java_mirror()); + return (jclass) JNIHandles::make_local(THREAD, outer_klass->java_mirror()); } JVM_END @@ -1588,7 +1589,7 @@ constantPoolHandle i_cp(thread, k->constants()); Symbol* name = i_cp->symbol_at(noff); 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; @@ -1607,7 +1608,7 @@ Symbol* sym = InstanceKlass::cast(k)->generic_signature(); if (sym == NULL) return 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; @@ -1623,7 +1624,7 @@ Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); if (k->is_instance_klass()) { 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; @@ -1695,7 +1696,7 @@ AnnotationArray* type_annotations = InstanceKlass::cast(k)->class_type_annotations(); if (type_annotations != 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 +1716,7 @@ AnnotationArray* type_annotations = m->type_annotations(); if (type_annotations != 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; @@ -1731,7 +1732,7 @@ 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 static void bounds_check(const constantPoolHandle& cp, jint index, TRAPS) { @@ -1787,7 +1788,7 @@ flags, CHECK_NULL); result->obj_at_put(i, param); } - return (jobjectArray)JNIHandles::make_local(env, result()); + return (jobjectArray)JNIHandles::make_local(THREAD, result()); } } JVM_END @@ -1804,7 +1805,7 @@ java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_array_klass()) { // Return empty array 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))); @@ -1839,7 +1840,7 @@ } } assert(out_idx == num_fields, "just checking"); - return (jobjectArray) JNIHandles::make_local(env, result()); + return (jobjectArray) JNIHandles::make_local(THREAD, result()); } JVM_END @@ -1887,7 +1888,7 @@ // Return empty array if ofClass is not a record. 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 @@ -1912,7 +1913,7 @@ || java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))->is_array_klass()) { // Return empty array 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))); @@ -1965,7 +1966,7 @@ } } - 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)) @@ -2502,7 +2503,7 @@ JVMWrapper("JVM_AssertionStatusDirectives"); JvmtiVMObjectAllocEventCollector oam; oop asd = JavaAssertions::createAssertionStatusDirectives(CHECK_NULL); - return JNIHandles::make_local(env, asd); + return JNIHandles::make_local(THREAD, asd); JVM_END // Verification //////////////////////////////////////////////////////////////////////////////// @@ -3285,7 +3286,7 @@ JVMWrapper("JVM_CurrentThread"); oop jthread = thread->threadObj(); assert (thread != NULL, "no current thread!"); - return JNIHandles::make_local(env, jthread); + return JNIHandles::make_local(THREAD, jthread); JVM_END JVM_ENTRY(void, JVM_Interrupt(JNIEnv* env, jobject jthread)) @@ -3377,7 +3378,7 @@ 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 @@ -3413,7 +3414,7 @@ if (ref != NULL) { Universe::set_reference_pending_list(NULL); } - return JNIHandles::make_local(env, ref); + return JNIHandles::make_local(THREAD, ref); JVM_END JVM_ENTRY(jboolean, JVM_HasReferencePendingList(JNIEnv* env)) @@ -3441,7 +3442,7 @@ vfst.skip_reflection_related_frames(); // Only needed for 1.4 reflection oop loader = vfst.method()->method_holder()->class_loader(); if (loader != NULL && !SystemDictionary::is_platform_class_loader(loader)) { - return JNIHandles::make_local(env, loader); + return JNIHandles::make_local(THREAD, loader); } } return NULL; @@ -3480,7 +3481,7 @@ jvalue value; BasicType type = Reflection::array_get(&value, a, index, CHECK_NULL); oop box = Reflection::box(&value, type, CHECK_NULL); - return JNIHandles::make_local(env, box); + return JNIHandles::make_local(THREAD, box); JVM_END @@ -3530,7 +3531,7 @@ JvmtiVMObjectAllocEventCollector oam; oop element_mirror = JNIHandles::resolve(eltClass); 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 @@ -3541,7 +3542,7 @@ oop element_mirror = JNIHandles::resolve(eltClass); assert(dim_array->is_typeArray(), "just checking"); 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 @@ -3608,7 +3609,7 @@ if (str == NULL) return NULL; oop string = JNIHandles::resolve_non_null(str); oop result = StringTable::intern(string, CHECK_NULL); - return (jstring) JNIHandles::make_local(env, result); + return (jstring) JNIHandles::make_local(THREAD, result); JVM_END @@ -3667,7 +3668,7 @@ if (init && klass->is_instance_klass()) { klass->initialize(CHECK_NULL); } - return (jclass) JNIHandles::make_local(env, klass->java_mirror()); + return (jclass) JNIHandles::make_local(THREAD, klass->java_mirror()); } @@ -3681,14 +3682,14 @@ Handle receiver(THREAD, JNIHandles::resolve(obj)); objArrayHandle args(THREAD, objArrayOop(JNIHandles::resolve(args0))); 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()) { oop ret_type = java_lang_reflect_Method::return_type(method_handle()); assert(ret_type != NULL, "sanity check: ret_type oop must not be NULL!"); if (java_lang_Class::is_primitive(ret_type)) { // Only for primitive type vm allocates memory for java object. // See box() method. - JvmtiExport::post_vm_object_alloc(JavaThread::current(), result); + JvmtiExport::post_vm_object_alloc(thread, result); } } return res; @@ -3703,9 +3704,9 @@ oop constructor_mirror = JNIHandles::resolve(c); objArrayHandle args(THREAD, objArrayOop(JNIHandles::resolve(args0))); 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()) { - JvmtiExport::post_vm_object_alloc(JavaThread::current(), result); + JvmtiExport::post_vm_object_alloc(thread, result); } return res; JVM_END @@ -3818,7 +3819,7 @@ jclass jcls = NULL; if (lambda_ik != NULL) { 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; #else @@ -3876,7 +3877,7 @@ 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 @@ -3918,7 +3919,7 @@ // The JavaThread references in thread_handle_array are validated // in VM_ThreadDump::doit(). 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 @@ -4011,7 +4012,7 @@ Handle h = java_lang_String::create_from_platform_dependent_str(vm_args[i], CHECK_NULL); 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_ENTRY_NO_ENV(jint, JVM_FindSignal(const char *name))