--- a/hotspot/src/share/vm/classfile/systemDictionary.cpp Tue Feb 14 20:00:28 2017 -0800
+++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp Wed Feb 15 22:59:57 2017 -0500
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, 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
@@ -160,17 +160,17 @@
// Returns true if the passed class loader is the builtin application class loader
// or a custom system class loader. A customer system class loader can be
// specified via -Djava.system.class.loader.
-bool SystemDictionary::is_system_class_loader(Handle class_loader) {
- if (class_loader.is_null()) {
+bool SystemDictionary::is_system_class_loader(oop class_loader) {
+ if (class_loader == NULL) {
return false;
}
return (class_loader->klass() == SystemDictionary::jdk_internal_loader_ClassLoaders_AppClassLoader_klass() ||
- class_loader() == _java_system_loader);
+ class_loader == _java_system_loader);
}
// Returns true if the passed class loader is the platform class loader.
-bool SystemDictionary::is_platform_class_loader(Handle class_loader) {
- if (class_loader.is_null()) {
+bool SystemDictionary::is_platform_class_loader(oop class_loader) {
+ if (class_loader == NULL) {
return false;
}
return (class_loader->klass() == SystemDictionary::jdk_internal_loader_ClassLoaders_PlatformClassLoader_klass());
@@ -662,6 +662,8 @@
Ticks class_load_start_time = Ticks::now();
+ HandleMark hm(THREAD);
+
// Fix for 4474172; see evaluation for more details
class_loader = Handle(THREAD, java_lang_ClassLoader::non_reflection_class_loader(class_loader()));
ClassLoaderData *loader_data = register_loader(class_loader, CHECK_NULL);
@@ -1103,6 +1105,8 @@
ClassFileStream* st,
TRAPS) {
+ HandleMark hm(THREAD);
+
// Classloaders that support parallelism, e.g. bootstrap classloader,
// or all classloaders with UnsyncloadClass do not acquire lock here
bool DoObjectLock = true;
@@ -1381,6 +1385,7 @@
ClassLoaderData* loader_data = ClassLoaderData::class_loader_data(class_loader());
{
+ HandleMark hm(THREAD);
Handle lockObject = compute_loader_lock_object(class_loader, THREAD);
check_loader_lock_contention(lockObject, THREAD);
ObjectLocker ol(lockObject, THREAD, true);
@@ -1601,6 +1606,7 @@
void SystemDictionary::define_instance_class(instanceKlassHandle k, TRAPS) {
+ HandleMark hm(THREAD);
ClassLoaderData* loader_data = k->class_loader_data();
Handle class_loader_h(THREAD, loader_data->class_loader());
@@ -2608,8 +2614,9 @@
SystemDictionary::find_method_handle_type(signature, accessing_klass, CHECK_(empty));
int ref_kind = JVM_REF_invokeVirtual;
- Handle name_str = StringTable::intern(name, CHECK_(empty));
- objArrayHandle appendix_box = oopFactory::new_objArray(SystemDictionary::Object_klass(), 1, CHECK_(empty));
+ oop name_oop = StringTable::intern(name, CHECK_(empty));
+ Handle name_str (THREAD, name_oop);
+ objArrayHandle appendix_box = oopFactory::new_objArray_handle(SystemDictionary::Object_klass(), 1, CHECK_(empty));
assert(appendix_box->obj_at(0) == NULL, "");
// This should not happen. JDK code should take care of that.
@@ -2619,12 +2626,12 @@
// call java.lang.invoke.MethodHandleNatives::linkMethod(... String, MethodType) -> MemberName
JavaCallArguments args;
- args.push_oop(accessing_klass()->java_mirror());
+ args.push_oop(Handle(THREAD, accessing_klass()->java_mirror()));
args.push_int(ref_kind);
- args.push_oop(klass()->java_mirror());
- args.push_oop(name_str());
- args.push_oop(method_type());
- args.push_oop(appendix_box());
+ args.push_oop(Handle(THREAD, klass()->java_mirror()));
+ args.push_oop(name_str);
+ args.push_oop(method_type);
+ args.push_oop(appendix_box);
JavaValue result(T_OBJECT);
JavaCalls::call_static(&result,
SystemDictionary::MethodHandleNatives_klass(),
@@ -2682,7 +2689,7 @@
}
bool can_be_cached = true;
int npts = ArgumentCount(signature).size();
- objArrayHandle pts = oopFactory::new_objArray(SystemDictionary::Class_klass(), npts, CHECK_(empty));
+ objArrayHandle pts = oopFactory::new_objArray_handle(SystemDictionary::Class_klass(), npts, CHECK_(empty));
int arg = 0;
Handle rt; // the return type from the signature
ResourceMark rm(THREAD);
@@ -2725,7 +2732,7 @@
// call java.lang.invoke.MethodHandleNatives::findMethodHandleType(Class rt, Class[] pts) -> MethodType
JavaCallArguments args(Handle(THREAD, rt()));
- args.push_oop(pts());
+ args.push_oop(pts);
JavaValue result(T_OBJECT);
JavaCalls::call_static(&result,
SystemDictionary::MethodHandleNatives_klass(),
@@ -2768,7 +2775,8 @@
ResourceMark rm(THREAD);
SignatureStream ss(signature, false);
if (!ss.is_done()) {
- oop mirror = ss.as_java_mirror(caller->class_loader(), caller->protection_domain(),
+ oop mirror = ss.as_java_mirror(Handle(THREAD, caller->class_loader()),
+ Handle(THREAD, caller->protection_domain()),
SignatureStream::NCDFError, CHECK_(empty));
type = Handle(THREAD, mirror);
ss.next();
@@ -2781,11 +2789,11 @@
// call java.lang.invoke.MethodHandleNatives::linkMethodHandleConstant(Class caller, int refKind, Class callee, String name, Object type) -> MethodHandle
JavaCallArguments args;
- args.push_oop(caller->java_mirror()); // the referring class
+ args.push_oop(Handle(THREAD, caller->java_mirror())); // the referring class
args.push_int(ref_kind);
- args.push_oop(callee->java_mirror()); // the target class
- args.push_oop(name());
- args.push_oop(type());
+ args.push_oop(Handle(THREAD, callee->java_mirror())); // the target class
+ args.push_oop(name);
+ args.push_oop(type);
JavaValue result(T_OBJECT);
JavaCalls::call_static(&result,
SystemDictionary::MethodHandleNatives_klass(),
@@ -2832,16 +2840,16 @@
THROW_MSG_(vmSymbols::java_lang_InternalError(), "bad invokedynamic", empty);
}
- objArrayHandle appendix_box = oopFactory::new_objArray(SystemDictionary::Object_klass(), 1, CHECK_(empty));
+ objArrayHandle appendix_box = oopFactory::new_objArray_handle(SystemDictionary::Object_klass(), 1, CHECK_(empty));
assert(appendix_box->obj_at(0) == NULL, "");
// call java.lang.invoke.MethodHandleNatives::linkCallSite(caller, bsm, name, mtype, info, &appendix)
JavaCallArguments args;
- args.push_oop(caller->java_mirror());
- args.push_oop(bsm());
- args.push_oop(method_name());
- args.push_oop(method_type());
- args.push_oop(info());
+ args.push_oop(Handle(THREAD, caller->java_mirror()));
+ args.push_oop(bsm);
+ args.push_oop(method_name);
+ args.push_oop(method_type);
+ args.push_oop(info);
args.push_oop(appendix_box);
JavaValue result(T_OBJECT);
JavaCalls::call_static(&result,