2861 JavaThread* receiver = NULL; |
2861 JavaThread* receiver = NULL; |
2862 bool is_alive = tlh.cv_internal_thread_to_JavaThread(jthread, &receiver, NULL); |
2862 bool is_alive = tlh.cv_internal_thread_to_JavaThread(jthread, &receiver, NULL); |
2863 if (is_alive) { |
2863 if (is_alive) { |
2864 // jthread refers to a live JavaThread. |
2864 // jthread refers to a live JavaThread. |
2865 { |
2865 { |
2866 MutexLockerEx ml(receiver->SR_lock(), Mutex::_no_safepoint_check_flag); |
2866 MutexLocker ml(receiver->SR_lock(), Mutex::_no_safepoint_check_flag); |
2867 if (receiver->is_external_suspend()) { |
2867 if (receiver->is_external_suspend()) { |
2868 // Don't allow nested external suspend requests. We can't return |
2868 // Don't allow nested external suspend requests. We can't return |
2869 // an error from this interface so just ignore the problem. |
2869 // an error from this interface so just ignore the problem. |
2870 return; |
2870 return; |
2871 } |
2871 } |
3166 |
3166 |
3167 |
3167 |
3168 JVM_ENTRY(jobject, JVM_GetAndClearReferencePendingList(JNIEnv* env)) |
3168 JVM_ENTRY(jobject, JVM_GetAndClearReferencePendingList(JNIEnv* env)) |
3169 JVMWrapper("JVM_GetAndClearReferencePendingList"); |
3169 JVMWrapper("JVM_GetAndClearReferencePendingList"); |
3170 |
3170 |
3171 MonitorLockerEx ml(Heap_lock); |
3171 MonitorLocker ml(Heap_lock); |
3172 oop ref = Universe::reference_pending_list(); |
3172 oop ref = Universe::reference_pending_list(); |
3173 if (ref != NULL) { |
3173 if (ref != NULL) { |
3174 Universe::set_reference_pending_list(NULL); |
3174 Universe::set_reference_pending_list(NULL); |
3175 } |
3175 } |
3176 return JNIHandles::make_local(env, ref); |
3176 return JNIHandles::make_local(env, ref); |
3177 JVM_END |
3177 JVM_END |
3178 |
3178 |
3179 JVM_ENTRY(jboolean, JVM_HasReferencePendingList(JNIEnv* env)) |
3179 JVM_ENTRY(jboolean, JVM_HasReferencePendingList(JNIEnv* env)) |
3180 JVMWrapper("JVM_HasReferencePendingList"); |
3180 JVMWrapper("JVM_HasReferencePendingList"); |
3181 MonitorLockerEx ml(Heap_lock); |
3181 MonitorLocker ml(Heap_lock); |
3182 return Universe::has_reference_pending_list(); |
3182 return Universe::has_reference_pending_list(); |
3183 JVM_END |
3183 JVM_END |
3184 |
3184 |
3185 JVM_ENTRY(void, JVM_WaitForReferencePendingList(JNIEnv* env)) |
3185 JVM_ENTRY(void, JVM_WaitForReferencePendingList(JNIEnv* env)) |
3186 JVMWrapper("JVM_WaitForReferencePendingList"); |
3186 JVMWrapper("JVM_WaitForReferencePendingList"); |
3187 MonitorLockerEx ml(Heap_lock); |
3187 MonitorLocker ml(Heap_lock); |
3188 while (!Universe::has_reference_pending_list()) { |
3188 while (!Universe::has_reference_pending_list()) { |
3189 ml.wait(); |
3189 ml.wait(); |
3190 } |
3190 } |
3191 JVM_END |
3191 JVM_END |
3192 |
3192 |