src/hotspot/share/prims/jvm.cpp
changeset 54623 1126f0607c70
parent 54616 3ab77d8dc60a
child 54786 ebf733a324d4
equal deleted inserted replaced
54622:a8dcacf95bff 54623:1126f0607c70
  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