1.1 --- a/src/share/vm/prims/unsafe.cpp Fri Sep 05 00:28:43 2014 +0200 1.2 +++ b/src/share/vm/prims/unsafe.cpp Fri Sep 05 16:01:29 2014 -0400 1.3 @@ -953,6 +953,14 @@ 1.4 } 1.5 UNSAFE_END 1.6 1.7 +static jobject get_class_loader(JNIEnv* env, jclass cls) { 1.8 + if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) { 1.9 + return NULL; 1.10 + } 1.11 + Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls)); 1.12 + oop loader = k->class_loader(); 1.13 + return JNIHandles::make_local(env, loader); 1.14 +} 1.15 1.16 UNSAFE_ENTRY(jclass, Unsafe_DefineClass0(JNIEnv *env, jobject unsafe, jstring name, jbyteArray data, int offset, int length)) 1.17 UnsafeWrapper("Unsafe_DefineClass"); 1.18 @@ -961,7 +969,7 @@ 1.19 1.20 int depthFromDefineClass0 = 1; 1.21 jclass caller = JVM_GetCallerClass(env, depthFromDefineClass0); 1.22 - jobject loader = (caller == NULL) ? NULL : JVM_GetClassLoader(env, caller); 1.23 + jobject loader = (caller == NULL) ? NULL : get_class_loader(env, caller); 1.24 jobject pd = (caller == NULL) ? NULL : JVM_GetProtectionDomain(env, caller); 1.25 1.26 return Unsafe_DefineClass_impl(env, name, data, offset, length, loader, pd);