src/share/vm/prims/unsafe.cpp

changeset 7129
47e3110c47e8
parent 6912
c49dcaf78a65
child 7535
7ae4e26cb1e0
child 7547
f46871c6c063
     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);

mercurial