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))
3213 JVMWrapper("JVM_CurrentLoadedClass");
3214 ResourceMark rm(THREAD);
|
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_NO_ENV(void, JVM_SetNativeThreadName0(const char *name))
3184 JVMWrapper("JVM_SetNativeThreadName0");
3185 os::set_native_thread_name(name);
3186 JVM_END
3187
3188 JVM_ENTRY(void, JVM_SetNativeThreadName(JNIEnv* env, jobject jthread, jstring name))
3189 JVMWrapper("JVM_SetNativeThreadName");
3190 ResourceMark rm(THREAD);
3191 oop java_thread = JNIHandles::resolve_non_null(jthread);
3192 JavaThread* thr = java_lang_Thread::thread(java_thread);
3193 // Thread naming only supported for the current thread, doesn't work for
3194 // target threads.
3195 if (Thread::current() == thr && !thr->has_attached_via_jni()) {
3196 // we don't set the name of an attached thread to avoid stepping
3197 // on other programs
3198 const char *thread_name = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(name));
3199 JVM_SetNativeThreadName0(thread_name);
3200 }
3201 JVM_END
3202
3203 // java.lang.SecurityManager ///////////////////////////////////////////////////////////////////////
3204
3205 static bool is_trusted_frame(JavaThread* jthread, vframeStream* vfst) {
3206 assert(jthread->is_Java_thread(), "must be a Java thread");
3207 if (jthread->privileged_stack_top() == NULL) return false;
3208 if (jthread->privileged_stack_top()->frame_id() == vfst->frame_id()) {
3209 oop loader = jthread->privileged_stack_top()->class_loader();
3210 if (loader == NULL) return true;
3211 bool trusted = java_lang_ClassLoader::is_trusted_loader(loader);
3212 if (trusted) return true;
3213 }
3214 return false;
3215 }
3216
3217 JVM_ENTRY(jclass, JVM_CurrentLoadedClass(JNIEnv *env))
3218 JVMWrapper("JVM_CurrentLoadedClass");
3219 ResourceMark rm(THREAD);
|