< prev index next >

src/hotspot/share/prims/jvm.cpp

Print this page

        

*** 1,5 **** --- 1,6 ---- + /* * Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it
*** 139,149 **** ResourceMark rm; int line_number = -1; const char * source_file = NULL; const char * trace = "explicit"; InstanceKlass* caller = NULL; ! JavaThread* jthread = JavaThread::current(); if (jthread->has_last_Java_frame()) { vframeStream vfst(jthread); // scan up the stack skipping ClassLoader, AccessController and PrivilegedAction frames TempNewSymbol access_controller = SymbolTable::new_symbol("java/security/AccessController"); --- 140,150 ---- ResourceMark rm; int line_number = -1; const char * source_file = NULL; const char * trace = "explicit"; InstanceKlass* caller = NULL; ! JavaThread* jthread = (JavaThread*) THREAD; if (jthread->has_last_Java_frame()) { vframeStream vfst(jthread); // scan up the stack skipping ClassLoader, AccessController and PrivilegedAction frames TempNewSymbol access_controller = SymbolTable::new_symbol("java/security/AccessController");
*** 445,455 **** result_h->obj_at_put(ndx * 2 + 1, value_str()); ndx++; } } ! return (jobjectArray) JNIHandles::make_local(env, result_h()); JVM_END /* * Return the temporary directory that the VM uses for the attach --- 446,456 ---- result_h->obj_at_put(ndx * 2 + 1, value_str()); ndx++; } } ! return (jobjectArray) JNIHandles::make_local(THREAD, result_h()); JVM_END /* * Return the temporary directory that the VM uses for the attach
*** 462,472 **** JVM_ENTRY(jstring, JVM_GetTemporaryDirectory(JNIEnv *env)) JVMWrapper("JVM_GetTemporaryDirectory"); 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()); JVM_END // java.lang.Runtime ///////////////////////////////////////////////////////////////////////// --- 463,473 ---- JVM_ENTRY(jstring, JVM_GetTemporaryDirectory(JNIEnv *env)) JVMWrapper("JVM_GetTemporaryDirectory"); 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(THREAD, h()); JVM_END // java.lang.Runtime /////////////////////////////////////////////////////////////////////////
*** 566,576 **** stringStream ss; 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); } else { return NULL; } JVM_END --- 567,577 ---- stringStream ss; 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(THREAD, result); } else { return NULL; } JVM_END
*** 620,630 **** THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), "not enough space in buffers", NULL); } oop result = StackWalk::walk(stackStream_h, mode, skip_frames, frame_count, start_index, frames_array_h, CHECK_NULL); ! return JNIHandles::make_local(env, result); JVM_END JVM_ENTRY(jint, JVM_MoreStackWalk(JNIEnv *env, jobject stackStream, jlong mode, jlong anchor, jint frame_count, jint start_index, --- 621,631 ---- THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(), "not enough space in buffers", NULL); } oop result = StackWalk::walk(stackStream_h, mode, skip_frames, frame_count, start_index, frames_array_h, CHECK_NULL); ! return JNIHandles::make_local(THREAD, result); JVM_END JVM_ENTRY(jint, JVM_MoreStackWalk(JNIEnv *env, jobject stackStream, jlong mode, jlong anchor, jint frame_count, jint start_index,
*** 736,746 **** assert(obj->is_instance(), "should be instanceOop"); new_obj_oop = InstanceKlass::register_finalizer(instanceOop(new_obj()), CHECK_NULL); new_obj = Handle(THREAD, new_obj_oop); } ! return JNIHandles::make_local(env, new_obj()); JVM_END // java.io.File /////////////////////////////////////////////////////////////// JVM_LEAF(char*, JVM_NativePath(char* path)) --- 737,747 ---- assert(obj->is_instance(), "should be instanceOop"); new_obj_oop = InstanceKlass::register_finalizer(instanceOop(new_obj()), CHECK_NULL); new_obj = Handle(THREAD, new_obj_oop); } ! return JNIHandles::make_local(THREAD, new_obj()); JVM_END // java.io.File /////////////////////////////////////////////////////////////// JVM_LEAF(char*, JVM_NativePath(char* path))
*** 782,792 **** } break; 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()); } break; } } return NULL; --- 783,793 ---- } break; default: if (!m->is_ignored_by_security_stack_walk()) { // We have reached the desired frame; return the holder class. ! return (jclass) JNIHandles::make_local(THREAD, m->method_holder()->java_mirror()); } break; } } return NULL;
*** 801,811 **** mirror = Universe::java_mirror(t); } if (mirror == NULL) { THROW_MSG_0(vmSymbols::java_lang_ClassNotFoundException(), (char*) utf); } else { ! return (jclass) JNIHandles::make_local(env, mirror); } JVM_END // Returns a class loaded by the bootstrap class loader; or null --- 802,812 ---- mirror = Universe::java_mirror(t); } if (mirror == NULL) { THROW_MSG_0(vmSymbols::java_lang_ClassNotFoundException(), (char*) utf); } else { ! return (jclass) JNIHandles::make_local(THREAD, mirror); } JVM_END // Returns a class loaded by the bootstrap class loader; or null
*** 830,840 **** } if (log_is_enabled(Debug, class, resolve)) { trace_class_resolution(k); } ! return (jclass) JNIHandles::make_local(env, k->java_mirror()); JVM_END // Find a class with this name in this loader, using the caller's protection domain. JVM_ENTRY(jclass, JVM_FindClassFromCaller(JNIEnv* env, const char* name, jboolean init, jobject loader, --- 831,841 ---- } if (log_is_enabled(Debug, class, resolve)) { trace_class_resolution(k); } ! 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. JVM_ENTRY(jclass, JVM_FindClassFromCaller(JNIEnv* env, const char* name, jboolean init, jobject loader,
*** 918,928 **** counter->inc(); } } // common code for JVM_DefineClass() and JVM_DefineClassWithSource() ! static jclass jvm_define_class_common(JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd, const char *source, TRAPS) { if (source == NULL) source = "__JVM_DefineClass__"; --- 919,929 ---- counter->inc(); } } // common code for JVM_DefineClass() and JVM_DefineClassWithSource() ! static jclass jvm_define_class_common(const char *name, jobject loader, const jbyte *buf, jsize len, jobject pd, const char *source, TRAPS) { if (source == NULL) source = "__JVM_DefineClass__";
*** 962,972 **** if (log_is_enabled(Debug, class, resolve) && k != NULL) { trace_class_resolution(k); } ! return (jclass) JNIHandles::make_local(env, k->java_mirror()); } enum { NESTMATE = java_lang_invoke_MemberName::MN_NESTMATE_CLASS, HIDDEN_CLASS = java_lang_invoke_MemberName::MN_HIDDEN_CLASS, --- 963,973 ---- if (log_is_enabled(Debug, class, resolve) && k != NULL) { trace_class_resolution(k); } ! return (jclass) JNIHandles::make_local(THREAD, k->java_mirror()); } enum { NESTMATE = java_lang_invoke_MemberName::MN_NESTMATE_CLASS, HIDDEN_CLASS = java_lang_invoke_MemberName::MN_HIDDEN_CLASS,
*** 976,986 **** /* * 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, const jbyte *buf, jsize len, jobject pd, jboolean init, int flags, jobject classData, TRAPS) { assert(THREAD->is_Java_thread(), "must be a JavaThread"); JavaThread* jt = (JavaThread*) THREAD; ResourceMark rm(THREAD); --- 977,987 ---- /* * 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(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"); JavaThread* jt = (JavaThread*) THREAD; ResourceMark rm(THREAD);
*** 1097,1113 **** ik->initialize(CHECK_NULL); } else { ik->link_class(CHECK_NULL); } ! return (jclass) JNIHandles::make_local(env, 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); JVM_END /* * Define a class with the specified lookup class. * lookup: Lookup class --- 1098,1114 ---- ik->initialize(CHECK_NULL); } else { ik->link_class(CHECK_NULL); } ! 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(name, loader, buf, len, pd, NULL, THREAD); JVM_END /* * Define a class with the specified lookup class. * lookup: Lookup class
*** 1127,1143 **** THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Lookup class is null"); } assert(buf != NULL, "buf must not be NULL"); ! return jvm_lookup_define_class(env, 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); JVM_END JVM_ENTRY(jclass, JVM_FindLoadedClass(JNIEnv *env, jobject loader, jstring name)) JVMWrapper("JVM_FindLoadedClass"); ResourceMark rm(THREAD); --- 1128,1144 ---- THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "Lookup class is null"); } assert(buf != NULL, "buf must not be NULL"); ! 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(name, loader, buf, len, pd, source, THREAD); JVM_END JVM_ENTRY(jclass, JVM_FindLoadedClass(JNIEnv *env, jobject loader, jstring name)) JVMWrapper("JVM_FindLoadedClass"); ResourceMark rm(THREAD);
*** 1185,1195 **** // archive for the current classloader (h_loader). k = SystemDictionaryShared::find_or_load_shared_class(klass_name, h_loader, CHECK_NULL); } #endif return (k == NULL) ? NULL : ! (jclass) JNIHandles::make_local(env, k->java_mirror()); JVM_END // Module support ////////////////////////////////////////////////////////////////////////////// JVM_ENTRY(void, JVM_DefineModule(JNIEnv *env, jobject module, jboolean is_open, jstring version, --- 1186,1196 ---- // archive for the current classloader (h_loader). k = SystemDictionaryShared::find_or_load_shared_class(klass_name, h_loader, CHECK_NULL); } #endif return (k == NULL) ? NULL : ! (jclass) JNIHandles::make_local(THREAD, k->java_mirror()); JVM_END // Module support ////////////////////////////////////////////////////////////////////////////// JVM_ENTRY(void, JVM_DefineModule(JNIEnv *env, jobject module, jboolean is_open, jstring version,
*** 1231,1241 **** JvmtiVMObjectAllocEventCollector oam; ResourceMark rm(THREAD); 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); JVM_END JVM_ENTRY(jobjectArray, JVM_GetClassInterfaces(JNIEnv *env, jclass cls)) JVMWrapper("JVM_GetClassInterfaces"); --- 1232,1242 ---- JvmtiVMObjectAllocEventCollector oam; ResourceMark rm(THREAD); 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(THREAD, result); JVM_END JVM_ENTRY(jobjectArray, JVM_GetClassInterfaces(JNIEnv *env, jclass cls)) JVMWrapper("JVM_GetClassInterfaces");
*** 1244,1254 **** // Special handling for primitive objects 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); } Klass* klass = java_lang_Class::as_Klass(mirror); // Figure size of result array int size; --- 1245,1255 ---- // Special handling for primitive objects 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(THREAD, r); } Klass* klass = java_lang_Class::as_Klass(mirror); // Figure size of result array int size;
*** 1272,1282 **** } else { // All arrays implement java.lang.Cloneable and java.io.Serializable 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()); JVM_END JVM_ENTRY(jboolean, JVM_IsInterface(JNIEnv *env, jclass cls)) JVMWrapper("JVM_IsInterface"); --- 1273,1283 ---- } else { // All arrays implement java.lang.Cloneable and java.io.Serializable 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(THREAD, result()); JVM_END JVM_ENTRY(jboolean, JVM_IsInterface(JNIEnv *env, jclass cls)) JVMWrapper("JVM_IsInterface");
*** 1323,1333 **** for (int index = 0; index < signers->length(); index++) { signers_copy->obj_at_put(index, signers->obj_at(index)); } // return the copy ! return (jobjectArray) JNIHandles::make_local(env, signers_copy); JVM_END JVM_ENTRY(void, JVM_SetClassSigners(JNIEnv *env, jclass cls, jobjectArray signers)) JVMWrapper("JVM_SetClassSigners"); --- 1324,1334 ---- for (int index = 0; index < signers->length(); index++) { signers_copy->obj_at_put(index, signers->obj_at(index)); } // return the copy ! return (jobjectArray) JNIHandles::make_local(THREAD, signers_copy); JVM_END JVM_ENTRY(void, JVM_SetClassSigners(JNIEnv *env, jclass cls, jobjectArray signers)) JVMWrapper("JVM_SetClassSigners");
*** 1353,1371 **** // Primitive types does not have a protection domain. return NULL; } oop pd = java_lang_Class::protection_domain(JNIHandles::resolve(cls)); ! return (jobject) JNIHandles::make_local(env, pd); JVM_END // Returns the inherited_access_control_context field of the running thread. 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); JVM_END class RegisterArrayForGC { private: JavaThread *_thread; --- 1354,1372 ---- // Primitive types does not have a protection domain. return NULL; } oop pd = java_lang_Class::protection_domain(JNIHandles::resolve(cls)); ! return (jobject) JNIHandles::make_local(THREAD, pd); JVM_END // Returns the inherited_access_control_context field of the running thread. 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(THREAD, result); JVM_END class RegisterArrayForGC { private: JavaThread *_thread;
*** 1440,1450 **** // we had a privileged system domain if (local_array->is_empty()) { 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); } // the resource area must be registered in case of a gc RegisterArrayForGC ragc(thread, local_array); objArrayOop context = oopFactory::new_objArray(SystemDictionary::ProtectionDomain_klass(), --- 1441,1451 ---- // we had a privileged system domain if (local_array->is_empty()) { 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(THREAD, result); } // the resource area must be registered in case of a gc RegisterArrayForGC ragc(thread, local_array); objArrayOop context = oopFactory::new_objArray(SystemDictionary::ProtectionDomain_klass(),
*** 1454,1464 **** h_context->obj_at_put(index, local_array->at(index)); } oop result = java_security_AccessControlContext::create(h_context, is_privileged, privileged_context, CHECK_NULL); ! return JNIHandles::make_local(env, result); JVM_END JVM_ENTRY(jboolean, JVM_IsArrayClass(JNIEnv *env, jclass cls)) JVMWrapper("JVM_IsArrayClass"); --- 1455,1465 ---- h_context->obj_at_put(index, local_array->at(index)); } oop result = java_security_AccessControlContext::create(h_context, is_privileged, privileged_context, CHECK_NULL); ! return JNIHandles::make_local(THREAD, result); JVM_END JVM_ENTRY(jboolean, JVM_IsArrayClass(JNIEnv *env, jclass cls)) JVMWrapper("JVM_IsArrayClass");
*** 1496,1515 **** // of an InstanceKlass 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); } InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))); InnerClassesIterator iter(k); 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); } // find inner class info constantPoolHandle cp(thread, k->constants()); int length = iter.length(); --- 1497,1516 ---- // of an InstanceKlass 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(THREAD, result); } InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))); InnerClassesIterator iter(k); 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(THREAD, result); } // find inner class info constantPoolHandle cp(thread, k->constants()); int length = iter.length();
*** 1547,1560 **** // Return array of right length objArrayOop res = oopFactory::new_objArray(SystemDictionary::Class_klass(), members, CHECK_NULL); 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(env, result()); JVM_END JVM_ENTRY(jclass, JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass)) { --- 1548,1561 ---- // Return array of right length objArrayOop res = oopFactory::new_objArray(SystemDictionary::Class_klass(), members, CHECK_NULL); for(int i = 0; i < members; i++) { res->obj_at_put(i, result->obj_at(i)); } ! return (jobjectArray)JNIHandles::make_local(THREAD, res); } ! return (jobjectArray)JNIHandles::make_local(THREAD, result()); JVM_END JVM_ENTRY(jclass, JVM_GetDeclaringClass(JNIEnv *env, jclass ofClass)) {
*** 1568,1578 **** Klass* outer_klass = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)) )->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()); } JVM_END JVM_ENTRY(jstring, JVM_GetSimpleBinaryName(JNIEnv *env, jclass cls)) { --- 1569,1579 ---- Klass* outer_klass = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass)) )->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(THREAD, outer_klass->java_mirror()); } JVM_END JVM_ENTRY(jstring, JVM_GetSimpleBinaryName(JNIEnv *env, jclass cls)) {
*** 1586,1596 **** if (k->find_inner_classes_attr(&ooff, &noff, THREAD)) { if (noff != 0) { 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 NULL; } JVM_END --- 1587,1597 ---- if (k->find_inner_classes_attr(&ooff, &noff, THREAD)) { if (noff != 0) { 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(THREAD, str()); } } return NULL; } JVM_END
*** 1605,1615 **** Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); if (k->is_instance_klass()) { 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 NULL; JVM_END --- 1606,1616 ---- Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); if (k->is_instance_klass()) { 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(THREAD, str()); } } return NULL; JVM_END
*** 1621,1631 **** // Return null for arrays and primitives if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) { 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 NULL; JVM_END --- 1622,1632 ---- // Return null for arrays and primitives if (!java_lang_Class::is_primitive(JNIHandles::resolve(cls))) { 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(THREAD, a); } } return NULL; JVM_END
*** 1693,1703 **** Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); if (k->is_instance_klass()) { 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 NULL; JVM_END --- 1694,1704 ---- Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); if (k->is_instance_klass()) { 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(THREAD, a); } } } return NULL; JVM_END
*** 1713,1723 **** } 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 NULL; JVM_END --- 1714,1724 ---- } 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(THREAD, a); } return NULL; JVM_END
*** 1729,1739 **** bool gotFd = jvm_get_field_common(field, fd, CHECK_NULL); if (!gotFd) { return NULL; } ! return (jbyteArray) JNIHandles::make_local(env, Annotations::make_java_array(fd.type_annotations(), THREAD)); JVM_END static void bounds_check(const constantPoolHandle& cp, jint index, TRAPS) { if (!cp->is_within_bounds(index)) { THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Constant pool index out of bounds"); --- 1730,1740 ---- bool gotFd = jvm_get_field_common(field, fd, CHECK_NULL); if (!gotFd) { return NULL; } ! 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) { if (!cp->is_within_bounds(index)) { THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Constant pool index out of bounds");
*** 1785,1795 **** int flags = params[i].flags; oop param = Reflection::new_parameter(reflected_method, i, sym, flags, CHECK_NULL); result->obj_at_put(i, param); } ! return (jobjectArray)JNIHandles::make_local(env, result()); } } JVM_END // New (JDK 1.4) reflection implementation ///////////////////////////////////// --- 1786,1796 ---- int flags = params[i].flags; oop param = Reflection::new_parameter(reflected_method, i, sym, flags, CHECK_NULL); result->obj_at_put(i, param); } ! return (jobjectArray)JNIHandles::make_local(THREAD, result()); } } JVM_END // New (JDK 1.4) reflection implementation /////////////////////////////////////
*** 1802,1812 **** // Exclude primitive types and array types if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || 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); } InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))); constantPoolHandle cp(THREAD, k->constants()); --- 1803,1813 ---- // Exclude primitive types and array types if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || 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(THREAD, res); } InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))); constantPoolHandle cp(THREAD, k->constants());
*** 1837,1847 **** result->obj_at_put(out_idx, field); ++out_idx; } } assert(out_idx == num_fields, "just checking"); ! return (jobjectArray) JNIHandles::make_local(env, result()); } JVM_END JVM_ENTRY(jboolean, JVM_IsRecord(JNIEnv *env, jclass cls)) { --- 1838,1848 ---- result->obj_at_put(out_idx, field); ++out_idx; } } assert(out_idx == num_fields, "just checking"); ! return (jobjectArray) JNIHandles::make_local(THREAD, result()); } JVM_END JVM_ENTRY(jboolean, JVM_IsRecord(JNIEnv *env, jclass cls)) {
*** 1885,1895 **** } } // 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); } JVM_END static bool select_method(const methodHandle& method, bool want_constructor) { if (want_constructor) { --- 1886,1896 ---- } } // 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(THREAD, result); } JVM_END static bool select_method(const methodHandle& method, bool want_constructor) { if (want_constructor) {
*** 1910,1920 **** // Exclude primitive types and array types if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || 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); } InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))); // Ensure class is linked --- 1911,1921 ---- // Exclude primitive types and array types if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(ofClass)) || 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(THREAD, res); } InstanceKlass* k = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(ofClass))); // Ensure class is linked
*** 1963,1973 **** } result->obj_at_put(i, m); } } ! return (jobjectArray) JNIHandles::make_local(env, result()); } JVM_ENTRY(jobjectArray, JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass, jboolean publicOnly)) { JVMWrapper("JVM_GetClassDeclaredMethods"); --- 1964,1974 ---- } result->obj_at_put(i, m); } } ! return (jobjectArray) JNIHandles::make_local(THREAD, result()); } JVM_ENTRY(jobjectArray, JVM_GetClassDeclaredMethods(JNIEnv *env, jclass ofClass, jboolean publicOnly)) { JVMWrapper("JVM_GetClassDeclaredMethods");
*** 2500,2510 **** // command-line assertion arguments (i.e., -ea, -da). JVM_ENTRY(jobject, JVM_AssertionStatusDirectives(JNIEnv *env, jclass unused)) JVMWrapper("JVM_AssertionStatusDirectives"); JvmtiVMObjectAllocEventCollector oam; oop asd = JavaAssertions::createAssertionStatusDirectives(CHECK_NULL); ! return JNIHandles::make_local(env, asd); JVM_END // Verification //////////////////////////////////////////////////////////////////////////////// // Reflection for the verifier ///////////////////////////////////////////////////////////////// --- 2501,2511 ---- // command-line assertion arguments (i.e., -ea, -da). JVM_ENTRY(jobject, JVM_AssertionStatusDirectives(JNIEnv *env, jclass unused)) JVMWrapper("JVM_AssertionStatusDirectives"); JvmtiVMObjectAllocEventCollector oam; oop asd = JavaAssertions::createAssertionStatusDirectives(CHECK_NULL); ! return JNIHandles::make_local(THREAD, asd); JVM_END // Verification //////////////////////////////////////////////////////////////////////////////// // Reflection for the verifier /////////////////////////////////////////////////////////////////
*** 3283,3293 **** JVM_ENTRY(jobject, JVM_CurrentThread(JNIEnv* env, jclass threadClass)) JVMWrapper("JVM_CurrentThread"); oop jthread = thread->threadObj(); assert (thread != NULL, "no current thread!"); ! return JNIHandles::make_local(env, jthread); JVM_END JVM_ENTRY(void, JVM_Interrupt(JNIEnv* env, jobject jthread)) JVMWrapper("JVM_Interrupt"); --- 3284,3294 ---- JVM_ENTRY(jobject, JVM_CurrentThread(JNIEnv* env, jclass threadClass)) JVMWrapper("JVM_CurrentThread"); oop jthread = thread->threadObj(); assert (thread != NULL, "no current thread!"); ! return JNIHandles::make_local(THREAD, jthread); JVM_END JVM_ENTRY(void, JVM_Interrupt(JNIEnv* env, jobject jthread)) JVMWrapper("JVM_Interrupt");
*** 3375,3385 **** // Fill in mirrors corresponding to method holders for (int i = 0; i < klass_array->length(); i++) { result->obj_at_put(i, klass_array->at(i)->java_mirror()); } ! return (jobjectArray) JNIHandles::make_local(env, result); JVM_END // java.lang.Package //////////////////////////////////////////////////////////////// --- 3376,3386 ---- // Fill in mirrors corresponding to method holders for (int i = 0; i < klass_array->length(); i++) { result->obj_at_put(i, klass_array->at(i)->java_mirror()); } ! return (jobjectArray) JNIHandles::make_local(THREAD, result); JVM_END // java.lang.Package ////////////////////////////////////////////////////////////////
*** 3411,3421 **** MonitorLocker ml(Heap_lock); oop ref = Universe::reference_pending_list(); if (ref != NULL) { Universe::set_reference_pending_list(NULL); } ! return JNIHandles::make_local(env, ref); JVM_END JVM_ENTRY(jboolean, JVM_HasReferencePendingList(JNIEnv* env)) JVMWrapper("JVM_HasReferencePendingList"); MonitorLocker ml(Heap_lock); --- 3412,3422 ---- MonitorLocker ml(Heap_lock); oop ref = Universe::reference_pending_list(); if (ref != NULL) { Universe::set_reference_pending_list(NULL); } ! return JNIHandles::make_local(THREAD, ref); JVM_END JVM_ENTRY(jboolean, JVM_HasReferencePendingList(JNIEnv* env)) JVMWrapper("JVM_HasReferencePendingList"); MonitorLocker ml(Heap_lock);
*** 3439,3449 **** JVM_ENTRY(jobject, JVM_LatestUserDefinedLoader(JNIEnv *env)) for (vframeStream vfst(thread); !vfst.at_end(); vfst.next()) { 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 NULL; JVM_END --- 3440,3450 ---- JVM_ENTRY(jobject, JVM_LatestUserDefinedLoader(JNIEnv *env)) for (vframeStream vfst(thread); !vfst.at_end(); vfst.next()) { 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(THREAD, loader); } } return NULL; JVM_END
*** 3478,3488 **** JvmtiVMObjectAllocEventCollector oam; arrayOop a = check_array(env, arr, false, CHECK_NULL); 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); JVM_END JVM_ENTRY(jvalue, JVM_GetPrimitiveArrayElement(JNIEnv *env, jobject arr, jint index, jint wCode)) JVMWrapper("JVM_GetPrimitiveArrayElement"); --- 3479,3489 ---- JvmtiVMObjectAllocEventCollector oam; arrayOop a = check_array(env, arr, false, CHECK_NULL); jvalue value; BasicType type = Reflection::array_get(&value, a, index, CHECK_NULL); oop box = Reflection::box(&value, type, CHECK_NULL); ! return JNIHandles::make_local(THREAD, box); JVM_END JVM_ENTRY(jvalue, JVM_GetPrimitiveArrayElement(JNIEnv *env, jobject arr, jint index, jint wCode)) JVMWrapper("JVM_GetPrimitiveArrayElement");
*** 3528,3549 **** JVM_ENTRY(jobject, JVM_NewArray(JNIEnv *env, jclass eltClass, jint length)) JVMWrapper("JVM_NewArray"); 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); JVM_END JVM_ENTRY(jobject, JVM_NewMultiArray(JNIEnv *env, jclass eltClass, jintArray dim)) JVMWrapper("JVM_NewMultiArray"); JvmtiVMObjectAllocEventCollector oam; arrayOop dim_array = check_array(env, dim, true, CHECK_NULL); 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); JVM_END // Library support /////////////////////////////////////////////////////////////////////////// --- 3529,3550 ---- JVM_ENTRY(jobject, JVM_NewArray(JNIEnv *env, jclass eltClass, jint length)) JVMWrapper("JVM_NewArray"); JvmtiVMObjectAllocEventCollector oam; oop element_mirror = JNIHandles::resolve(eltClass); oop result = Reflection::reflect_new_array(element_mirror, length, CHECK_NULL); ! return JNIHandles::make_local(THREAD, result); JVM_END JVM_ENTRY(jobject, JVM_NewMultiArray(JNIEnv *env, jclass eltClass, jintArray dim)) JVMWrapper("JVM_NewMultiArray"); JvmtiVMObjectAllocEventCollector oam; arrayOop dim_array = check_array(env, dim, true, CHECK_NULL); 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(THREAD, result); JVM_END // Library support ///////////////////////////////////////////////////////////////////////////
*** 3606,3616 **** JVMWrapper("JVM_InternString"); JvmtiVMObjectAllocEventCollector oam; 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); JVM_END // VM Raw monitor support ////////////////////////////////////////////////////////////////////// --- 3607,3617 ---- JVMWrapper("JVM_InternString"); JvmtiVMObjectAllocEventCollector oam; if (str == NULL) return NULL; oop string = JNIHandles::resolve_non_null(str); oop result = StringTable::intern(string, CHECK_NULL); ! return (jstring) JNIHandles::make_local(THREAD, result); JVM_END // VM Raw monitor support //////////////////////////////////////////////////////////////////////
*** 3665,3675 **** // Check if we should initialize the class if (init && klass->is_instance_klass()) { klass->initialize(CHECK_NULL); } ! return (jclass) JNIHandles::make_local(env, klass->java_mirror()); } // Method /////////////////////////////////////////////////////////////////////////////////////////// --- 3666,3676 ---- // Check if we should initialize the class if (init && klass->is_instance_klass()) { klass->initialize(CHECK_NULL); } ! return (jclass) JNIHandles::make_local(THREAD, klass->java_mirror()); } // Method ///////////////////////////////////////////////////////////////////////////////////////////
*** 3679,3696 **** if (thread->stack_available((address) &method_handle) >= JVMInvokeMethodSlack) { method_handle = Handle(THREAD, JNIHandles::resolve(method)); 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); 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); } } return res; } else { THROW_0(vmSymbols::java_lang_StackOverflowError()); --- 3680,3697 ---- if (thread->stack_available((address) &method_handle) >= JVMInvokeMethodSlack) { method_handle = Handle(THREAD, JNIHandles::resolve(method)); 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(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(thread, result); } } return res; } else { THROW_0(vmSymbols::java_lang_StackOverflowError());
*** 3701,3713 **** JVM_ENTRY(jobject, JVM_NewInstanceFromConstructor(JNIEnv *env, jobject c, jobjectArray args0)) JVMWrapper("JVM_NewInstanceFromConstructor"); 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); if (JvmtiExport::should_post_vm_object_alloc()) { ! JvmtiExport::post_vm_object_alloc(JavaThread::current(), result); } return res; JVM_END // Atomic /////////////////////////////////////////////////////////////////////////////////////////// --- 3702,3714 ---- JVM_ENTRY(jobject, JVM_NewInstanceFromConstructor(JNIEnv *env, jobject c, jobjectArray args0)) JVMWrapper("JVM_NewInstanceFromConstructor"); 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(THREAD, result); if (JvmtiExport::should_post_vm_object_alloc()) { ! JvmtiExport::post_vm_object_alloc(thread, result); } return res; JVM_END // Atomic ///////////////////////////////////////////////////////////////////////////////////////////
*** 3816,3826 **** InstanceKlass* lambda_ik = SystemDictionaryShared::get_shared_lambda_proxy_class(caller_ik, invoked_name, invoked_type, method_type, m, instantiated_method_type); 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()); } return jcls; #else return NULL; #endif // INCLUDE_CDS --- 3817,3827 ---- InstanceKlass* lambda_ik = SystemDictionaryShared::get_shared_lambda_proxy_class(caller_ik, invoked_name, invoked_type, method_type, m, instantiated_method_type); 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(THREAD, loaded_lambda->java_mirror()); } return jcls; #else return NULL; #endif // INCLUDE_CDS
*** 3874,3884 **** for (int i = 0; i < num_threads; i++) { Handle h = tle.get_threadObj(i); threads_ah->obj_at_put(i, h()); } ! return (jobjectArray) JNIHandles::make_local(env, threads_ah()); JVM_END // Support for java.lang.Thread.getStackTrace() and getAllStackTraces() methods // Return StackTraceElement[][], each element is the stack trace of a thread in --- 3875,3885 ---- for (int i = 0; i < num_threads; i++) { Handle h = tle.get_threadObj(i); threads_ah->obj_at_put(i, h()); } ! return (jobjectArray) JNIHandles::make_local(THREAD, threads_ah()); JVM_END // Support for java.lang.Thread.getStackTrace() and getAllStackTraces() methods // Return StackTraceElement[][], each element is the stack trace of a thread in
*** 3916,3926 **** } // 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()); JVM_END // JVM monitoring and management support JVM_ENTRY_NO_ENV(void*, JVM_GetManagement(jint version)) --- 3917,3927 ---- } // 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(THREAD, stacktraces()); JVM_END // JVM monitoring and management support JVM_ENTRY_NO_ENV(void*, JVM_GetManagement(jint version))
*** 4009,4019 **** } for (int i = 0; i < num_args; i++, index++) { 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()); JVM_END JVM_ENTRY_NO_ENV(jint, JVM_FindSignal(const char *name)) return os::get_signal_number(name); JVM_END --- 4010,4020 ---- } for (int i = 0; i < num_args; i++, index++) { 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(THREAD, result_h()); JVM_END JVM_ENTRY_NO_ENV(jint, JVM_FindSignal(const char *name)) return os::get_signal_number(name); JVM_END
< prev index next >