hotspot/src/share/vm/prims/unsafe.cpp
changeset 25326 85b2f2e63e3e
parent 25057 f38210f84f8c
child 25354 f6762819b488
equal deleted inserted replaced
25325:e3af4e02b0d5 25326:85b2f2e63e3e
   889     ThreadToNativeFromVM ttnfv(thread);
   889     ThreadToNativeFromVM ttnfv(thread);
   890     return Unsafe_DefineClass_impl(env, name, data, offset, length, loader, pd);
   890     return Unsafe_DefineClass_impl(env, name, data, offset, length, loader, pd);
   891   }
   891   }
   892 UNSAFE_END
   892 UNSAFE_END
   893 
   893 
       
   894 static jobject get_class_loader(JNIEnv* env, jclass cls) {
       
   895   if (java_lang_Class::is_primitive(JNIHandles::resolve_non_null(cls))) {
       
   896     return NULL;
       
   897   }
       
   898   Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve_non_null(cls));
       
   899   oop loader = k->class_loader();
       
   900   return JNIHandles::make_local(env, loader);
       
   901 }
   894 
   902 
   895 UNSAFE_ENTRY(jclass, Unsafe_DefineClass0(JNIEnv *env, jobject unsafe, jstring name, jbyteArray data, int offset, int length))
   903 UNSAFE_ENTRY(jclass, Unsafe_DefineClass0(JNIEnv *env, jobject unsafe, jstring name, jbyteArray data, int offset, int length))
   896   UnsafeWrapper("Unsafe_DefineClass");
   904   UnsafeWrapper("Unsafe_DefineClass");
   897   {
   905   {
   898     ThreadToNativeFromVM ttnfv(thread);
   906     ThreadToNativeFromVM ttnfv(thread);
   899 
   907 
   900     int depthFromDefineClass0 = 1;
   908     int depthFromDefineClass0 = 1;
   901     jclass  caller = JVM_GetCallerClass(env, depthFromDefineClass0);
   909     jclass  caller = JVM_GetCallerClass(env, depthFromDefineClass0);
   902     jobject loader = (caller == NULL) ? NULL : JVM_GetClassLoader(env, caller);
   910     jobject loader = (caller == NULL) ? NULL : get_class_loader(env, caller);
   903     jobject pd     = (caller == NULL) ? NULL : JVM_GetProtectionDomain(env, caller);
   911     jobject pd     = (caller == NULL) ? NULL : JVM_GetProtectionDomain(env, caller);
   904 
   912 
   905     return Unsafe_DefineClass_impl(env, name, data, offset, length, loader, pd);
   913     return Unsafe_DefineClass_impl(env, name, data, offset, length, loader, pd);
   906   }
   914   }
   907 UNSAFE_END
   915 UNSAFE_END