2957 JVMWrapper("JVM_Yield");
2958 if (os::dont_yield()) return;
2959 HOTSPOT_THREAD_YIELD();
2960 os::naked_yield();
2961 JVM_END
2962
2963 static void post_thread_sleep_event(EventThreadSleep* event, jlong millis) {
2964 assert(event != NULL, "invariant");
2965 assert(event->should_commit(), "invariant");
2966 event->set_time(millis);
2967 event->commit();
2968 }
2969
2970 JVM_ENTRY(void, JVM_Sleep(JNIEnv* env, jclass threadClass, jlong millis))
2971 JVMWrapper("JVM_Sleep");
2972
2973 if (millis < 0) {
2974 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "timeout value is negative");
2975 }
2976
2977 if (Thread::is_interrupted (THREAD, true) && !HAS_PENDING_EXCEPTION) {
2978 THROW_MSG(vmSymbols::java_lang_InterruptedException(), "sleep interrupted");
2979 }
2980
2981 // Save current thread state and restore it at the end of this block.
2982 // And set new thread state to SLEEPING.
2983 JavaThreadSleepState jtss(thread);
2984
2985 HOTSPOT_THREAD_SLEEP_BEGIN(millis);
2986 EventThreadSleep event;
2987
2988 if (millis == 0) {
2989 os::naked_yield();
2990 } else {
2991 ThreadState old_state = thread->osthread()->get_state();
2992 thread->osthread()->set_state(SLEEPING);
2993 if (!thread->sleep(millis)) { // interrupted
2994 // An asynchronous exception (e.g., ThreadDeathException) could have been thrown on
2995 // us while we were sleeping. We do not overwrite those.
2996 if (!HAS_PENDING_EXCEPTION) {
2997 if (event.should_commit()) {
3054 Handshake::execute(&csf, receiver);
3055 if (!csf.suspended()) {
3056 THROW_MSG_0(vmSymbols::java_lang_IllegalThreadStateException(),
3057 "this thread is not suspended");
3058 }
3059 return csf.count();
3060 }
3061 // Implied else: if JavaThread is not alive simply return a count of 0.
3062 return 0;
3063 JVM_END
3064
3065
3066 JVM_ENTRY(void, JVM_Interrupt(JNIEnv* env, jobject jthread))
3067 JVMWrapper("JVM_Interrupt");
3068
3069 ThreadsListHandle tlh(thread);
3070 JavaThread* receiver = NULL;
3071 bool is_alive = tlh.cv_internal_thread_to_JavaThread(jthread, &receiver, NULL);
3072 if (is_alive) {
3073 // jthread refers to a live JavaThread.
3074 Thread::interrupt(receiver);
3075 }
3076 JVM_END
3077
3078
3079 JVM_ENTRY(jboolean, JVM_IsInterrupted(JNIEnv* env, jobject jthread, jboolean clear_interrupted))
3080 JVMWrapper("JVM_IsInterrupted");
3081
3082 ThreadsListHandle tlh(thread);
3083 JavaThread* receiver = NULL;
3084 bool is_alive = tlh.cv_internal_thread_to_JavaThread(jthread, &receiver, NULL);
3085 if (is_alive) {
3086 // jthread refers to a live JavaThread.
3087 return (jboolean) Thread::is_interrupted(receiver, clear_interrupted != 0);
3088 } else {
3089 return JNI_FALSE;
3090 }
3091 JVM_END
3092
3093
3094 // Return true iff the current thread has locked the object passed in
3095
3096 JVM_ENTRY(jboolean, JVM_HoldsLock(JNIEnv* env, jclass threadClass, jobject obj))
3097 JVMWrapper("JVM_HoldsLock");
3098 assert(THREAD->is_Java_thread(), "sanity check");
3099 if (obj == NULL) {
3100 THROW_(vmSymbols::java_lang_NullPointerException(), JNI_FALSE);
3101 }
3102 Handle h_obj(THREAD, JNIHandles::resolve(obj));
3103 return ObjectSynchronizer::current_thread_holds_lock((JavaThread*)THREAD, h_obj);
3104 JVM_END
3105
3106
3107 JVM_ENTRY(void, JVM_DumpAllStacks(JNIEnv* env, jclass))
|
2957 JVMWrapper("JVM_Yield");
2958 if (os::dont_yield()) return;
2959 HOTSPOT_THREAD_YIELD();
2960 os::naked_yield();
2961 JVM_END
2962
2963 static void post_thread_sleep_event(EventThreadSleep* event, jlong millis) {
2964 assert(event != NULL, "invariant");
2965 assert(event->should_commit(), "invariant");
2966 event->set_time(millis);
2967 event->commit();
2968 }
2969
2970 JVM_ENTRY(void, JVM_Sleep(JNIEnv* env, jclass threadClass, jlong millis))
2971 JVMWrapper("JVM_Sleep");
2972
2973 if (millis < 0) {
2974 THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "timeout value is negative");
2975 }
2976
2977 if (thread->is_interrupted(true) && !HAS_PENDING_EXCEPTION) {
2978 THROW_MSG(vmSymbols::java_lang_InterruptedException(), "sleep interrupted");
2979 }
2980
2981 // Save current thread state and restore it at the end of this block.
2982 // And set new thread state to SLEEPING.
2983 JavaThreadSleepState jtss(thread);
2984
2985 HOTSPOT_THREAD_SLEEP_BEGIN(millis);
2986 EventThreadSleep event;
2987
2988 if (millis == 0) {
2989 os::naked_yield();
2990 } else {
2991 ThreadState old_state = thread->osthread()->get_state();
2992 thread->osthread()->set_state(SLEEPING);
2993 if (!thread->sleep(millis)) { // interrupted
2994 // An asynchronous exception (e.g., ThreadDeathException) could have been thrown on
2995 // us while we were sleeping. We do not overwrite those.
2996 if (!HAS_PENDING_EXCEPTION) {
2997 if (event.should_commit()) {
3054 Handshake::execute(&csf, receiver);
3055 if (!csf.suspended()) {
3056 THROW_MSG_0(vmSymbols::java_lang_IllegalThreadStateException(),
3057 "this thread is not suspended");
3058 }
3059 return csf.count();
3060 }
3061 // Implied else: if JavaThread is not alive simply return a count of 0.
3062 return 0;
3063 JVM_END
3064
3065
3066 JVM_ENTRY(void, JVM_Interrupt(JNIEnv* env, jobject jthread))
3067 JVMWrapper("JVM_Interrupt");
3068
3069 ThreadsListHandle tlh(thread);
3070 JavaThread* receiver = NULL;
3071 bool is_alive = tlh.cv_internal_thread_to_JavaThread(jthread, &receiver, NULL);
3072 if (is_alive) {
3073 // jthread refers to a live JavaThread.
3074 receiver->interrupt();
3075 }
3076 JVM_END
3077
3078
3079 JVM_ENTRY(jboolean, JVM_IsInterrupted(JNIEnv* env, jobject jthread, jboolean clear_interrupted))
3080 JVMWrapper("JVM_IsInterrupted");
3081
3082 ThreadsListHandle tlh(thread);
3083 JavaThread* receiver = NULL;
3084 bool is_alive = tlh.cv_internal_thread_to_JavaThread(jthread, &receiver, NULL);
3085 if (is_alive) {
3086 // jthread refers to a live JavaThread.
3087 return (jboolean) receiver->is_interrupted(clear_interrupted != 0);
3088 } else {
3089 return JNI_FALSE;
3090 }
3091 JVM_END
3092
3093
3094 // Return true iff the current thread has locked the object passed in
3095
3096 JVM_ENTRY(jboolean, JVM_HoldsLock(JNIEnv* env, jclass threadClass, jobject obj))
3097 JVMWrapper("JVM_HoldsLock");
3098 assert(THREAD->is_Java_thread(), "sanity check");
3099 if (obj == NULL) {
3100 THROW_(vmSymbols::java_lang_NullPointerException(), JNI_FALSE);
3101 }
3102 Handle h_obj(THREAD, JNIHandles::resolve(obj));
3103 return ObjectSynchronizer::current_thread_holds_lock((JavaThread*)THREAD, h_obj);
3104 JVM_END
3105
3106
3107 JVM_ENTRY(void, JVM_DumpAllStacks(JNIEnv* env, jclass))
|