< prev index next >

src/hotspot/share/prims/jvm.cpp

Print this page

2932     // jthread refers to a live JavaThread.
2933     receiver->interrupt();
2934   }
2935 JVM_END
2936 
2937 // Return true iff the current thread has locked the object passed in
2938 
2939 JVM_ENTRY(jboolean, JVM_HoldsLock(JNIEnv* env, jclass threadClass, jobject obj))
2940   if (obj == nullptr) {
2941     THROW_(vmSymbols::java_lang_NullPointerException(), JNI_FALSE);
2942   }
2943   Handle h_obj(THREAD, JNIHandles::resolve(obj));
2944   return ObjectSynchronizer::current_thread_holds_lock(thread, h_obj);
2945 JVM_END
2946 
2947 JVM_ENTRY(jobject, JVM_GetStackTrace(JNIEnv *env, jobject jthread))
2948   oop trace = java_lang_Thread::async_get_stack_trace(JNIHandles::resolve(jthread), THREAD);
2949   return JNIHandles::make_local(THREAD, trace);
2950 JVM_END
2951 
2952 JVM_ENTRY(jobject, JVM_CreateThreadSnapshot(JNIEnv* env, jobject jthread))
2953 #if INCLUDE_JVMTI
2954   oop snapshot = ThreadSnapshotFactory::get_thread_snapshot(jthread, THREAD);
2955   return JNIHandles::make_local(THREAD, snapshot);
2956 #else
2957   THROW_NULL(vmSymbols::java_lang_UnsupportedOperationException());
2958 #endif
2959 JVM_END
2960 
2961 JVM_ENTRY(void, JVM_SetNativeThreadName(JNIEnv* env, jobject jthread, jstring name))
2962   // We don't use a ThreadsListHandle here because the current thread
2963   // must be alive.
2964   oop java_thread = JNIHandles::resolve_non_null(jthread);
2965   JavaThread* thr = java_lang_Thread::thread(java_thread);
2966   if (thread == thr && !thr->has_attached_via_jni()) {
2967     // Thread naming is only supported for the current thread and
2968     // we don't set the name of an attached thread to avoid stepping
2969     // on other programs.
2970     ResourceMark rm(thread);
2971     const char *thread_name = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(name));
2972     os::set_native_thread_name(thread_name);
2973   }
2974 JVM_END

2932     // jthread refers to a live JavaThread.
2933     receiver->interrupt();
2934   }
2935 JVM_END
2936 
2937 // Return true iff the current thread has locked the object passed in
2938 
2939 JVM_ENTRY(jboolean, JVM_HoldsLock(JNIEnv* env, jclass threadClass, jobject obj))
2940   if (obj == nullptr) {
2941     THROW_(vmSymbols::java_lang_NullPointerException(), JNI_FALSE);
2942   }
2943   Handle h_obj(THREAD, JNIHandles::resolve(obj));
2944   return ObjectSynchronizer::current_thread_holds_lock(thread, h_obj);
2945 JVM_END
2946 
2947 JVM_ENTRY(jobject, JVM_GetStackTrace(JNIEnv *env, jobject jthread))
2948   oop trace = java_lang_Thread::async_get_stack_trace(JNIHandles::resolve(jthread), THREAD);
2949   return JNIHandles::make_local(THREAD, trace);
2950 JVM_END
2951 
2952 JVM_ENTRY(jobject, JVM_CreateThreadSnapshot(JNIEnv* env, jobject jthread, jboolean suspendedByCaller))
2953 #if INCLUDE_JVMTI
2954   oop snapshot = ThreadSnapshotFactory::get_thread_snapshot(jthread, suspendedByCaller, THREAD);
2955   return JNIHandles::make_local(THREAD, snapshot);
2956 #else
2957   THROW_NULL(vmSymbols::java_lang_UnsupportedOperationException());
2958 #endif
2959 JVM_END
2960 
2961 JVM_ENTRY(void, JVM_SetNativeThreadName(JNIEnv* env, jobject jthread, jstring name))
2962   // We don't use a ThreadsListHandle here because the current thread
2963   // must be alive.
2964   oop java_thread = JNIHandles::resolve_non_null(jthread);
2965   JavaThread* thr = java_lang_Thread::thread(java_thread);
2966   if (thread == thr && !thr->has_attached_via_jni()) {
2967     // Thread naming is only supported for the current thread and
2968     // we don't set the name of an attached thread to avoid stepping
2969     // on other programs.
2970     ResourceMark rm(thread);
2971     const char *thread_name = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(name));
2972     os::set_native_thread_name(thread_name);
2973   }
2974 JVM_END
< prev index next >