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
|