3163 JVM_ENTRY(jboolean, JVM_HoldsLock(JNIEnv* env, jclass threadClass, jobject obj)) 3164 JVMWrapper("JVM_HoldsLock"); 3165 assert(THREAD->is_Java_thread(), "sanity check"); 3166 if (obj == NULL) { 3167 THROW_(vmSymbols::java_lang_NullPointerException(), JNI_FALSE); 3168 } 3169 Handle h_obj(THREAD, JNIHandles::resolve(obj)); 3170 return ObjectSynchronizer::current_thread_holds_lock((JavaThread*)THREAD, h_obj); 3171 JVM_END 3172 3173 3174 JVM_ENTRY(void, JVM_DumpAllStacks(JNIEnv* env, jclass)) 3175 JVMWrapper("JVM_DumpAllStacks"); 3176 VM_PrintThreads op; 3177 VMThread::execute(&op); 3178 if (JvmtiExport::should_post_data_dump()) { 3179 JvmtiExport::post_data_dump(); 3180 } 3181 JVM_END 3182 3183 JVM_ENTRY(void, JVM_SetNativeThreadName(JNIEnv* env, jobject jthread, jstring name)) 3184 JVMWrapper("JVM_SetNativeThreadName"); 3185 ResourceMark rm(THREAD); 3186 oop java_thread = JNIHandles::resolve_non_null(jthread); 3187 JavaThread* thr = java_lang_Thread::thread(java_thread); 3188 // Thread naming only supported for the current thread, doesn't work for 3189 // target threads. 3190 if (Thread::current() == thr && !thr->has_attached_via_jni()) { 3191 // we don't set the name of an attached thread to avoid stepping 3192 // on other programs 3193 const char *thread_name = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(name)); 3194 os::set_native_thread_name(thread_name); 3195 } 3196 JVM_END 3197 3198 // java.lang.SecurityManager /////////////////////////////////////////////////////////////////////// 3199 3200 static bool is_trusted_frame(JavaThread* jthread, vframeStream* vfst) { 3201 assert(jthread->is_Java_thread(), "must be a Java thread"); 3202 if (jthread->privileged_stack_top() == NULL) return false; 3203 if (jthread->privileged_stack_top()->frame_id() == vfst->frame_id()) { 3204 oop loader = jthread->privileged_stack_top()->class_loader(); 3205 if (loader == NULL) return true; 3206 bool trusted = java_lang_ClassLoader::is_trusted_loader(loader); 3207 if (trusted) return true; 3208 } 3209 return false; 3210 } 3211 3212 JVM_ENTRY(jclass, JVM_CurrentLoadedClass(JNIEnv *env)) | 3163 JVM_ENTRY(jboolean, JVM_HoldsLock(JNIEnv* env, jclass threadClass, jobject obj)) 3164 JVMWrapper("JVM_HoldsLock"); 3165 assert(THREAD->is_Java_thread(), "sanity check"); 3166 if (obj == NULL) { 3167 THROW_(vmSymbols::java_lang_NullPointerException(), JNI_FALSE); 3168 } 3169 Handle h_obj(THREAD, JNIHandles::resolve(obj)); 3170 return ObjectSynchronizer::current_thread_holds_lock((JavaThread*)THREAD, h_obj); 3171 JVM_END 3172 3173 3174 JVM_ENTRY(void, JVM_DumpAllStacks(JNIEnv* env, jclass)) 3175 JVMWrapper("JVM_DumpAllStacks"); 3176 VM_PrintThreads op; 3177 VMThread::execute(&op); 3178 if (JvmtiExport::should_post_data_dump()) { 3179 JvmtiExport::post_data_dump(); 3180 } 3181 JVM_END 3182 3183 JVM_ENTRY(void, JVM_SetNativeThreadName(JNIEnv* env, jobject jthread, jstring name, jboolean allowAttachedThread)) 3184 JVMWrapper("JVM_SetNativeThreadName"); 3185 ResourceMark rm(THREAD); 3186 oop java_thread = JNIHandles::resolve_non_null(jthread); 3187 JavaThread* thr = java_lang_Thread::thread(java_thread); 3188 // Thread naming only supported for the current thread, doesn't work for 3189 // target threads. 3190 if (Thread::current() == thr && (allowAttachedThread || !thr->has_attached_via_jni())) { 3191 // Sets the native thread name for a JavaThread. If specifically 3192 // requested JNI-attached threads can also have their native name set; 3193 // otherwise we do not modify JNI-attached threads as it may interfere 3194 // with the application that created them. 3195 const char *thread_name = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(name)); 3196 os::set_native_thread_name(thread_name); 3197 } 3198 JVM_END 3199 3200 // java.lang.SecurityManager /////////////////////////////////////////////////////////////////////// 3201 3202 static bool is_trusted_frame(JavaThread* jthread, vframeStream* vfst) { 3203 assert(jthread->is_Java_thread(), "must be a Java thread"); 3204 if (jthread->privileged_stack_top() == NULL) return false; 3205 if (jthread->privileged_stack_top()->frame_id() == vfst->frame_id()) { 3206 oop loader = jthread->privileged_stack_top()->class_loader(); 3207 if (loader == NULL) return true; 3208 bool trusted = java_lang_ClassLoader::is_trusted_loader(loader); 3209 if (trusted) return true; 3210 } 3211 return false; 3212 } 3213 3214 JVM_ENTRY(jclass, JVM_CurrentLoadedClass(JNIEnv *env)) |