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