Mercurial > hg > graal-jvmci-8
comparison src/share/vm/runtime/safepoint.cpp @ 5928:541c4a5e7b88
7150390: JFR test crashed on assert(_jni_lock_count == count) failed: must be equal
Reviewed-by: dholmes, minqi, kvn, coleenp
author | never |
---|---|
date | Tue, 06 Mar 2012 16:32:23 -0800 |
parents | 0382d2b469b2 |
children | e9140bf80b4a |
comparison
equal
deleted
inserted
replaced
5927:b40ac3579043 | 5928:541c4a5e7b88 |
---|---|
217 int ncpus = os::processor_count() ; | 217 int ncpus = os::processor_count() ; |
218 | 218 |
219 #ifdef ASSERT | 219 #ifdef ASSERT |
220 for (JavaThread *cur = Threads::first(); cur != NULL; cur = cur->next()) { | 220 for (JavaThread *cur = Threads::first(); cur != NULL; cur = cur->next()) { |
221 assert(cur->safepoint_state()->is_running(), "Illegal initial state"); | 221 assert(cur->safepoint_state()->is_running(), "Illegal initial state"); |
222 // Clear the visited flag to ensure that the critical counts are collected properly. | |
223 cur->set_visited_for_critical_count(false); | |
222 } | 224 } |
223 #endif // ASSERT | 225 #endif // ASSERT |
224 | 226 |
225 if (SafepointTimeout) | 227 if (SafepointTimeout) |
226 safepoint_limit_time = os::javaTimeNanos() + (jlong)SafepointTimeoutDelay * MICROUNITS; | 228 safepoint_limit_time = os::javaTimeNanos() + (jlong)SafepointTimeoutDelay * MICROUNITS; |
376 // Record state | 378 // Record state |
377 _state = _synchronized; | 379 _state = _synchronized; |
378 | 380 |
379 OrderAccess::fence(); | 381 OrderAccess::fence(); |
380 | 382 |
383 #ifdef ASSERT | |
384 for (JavaThread *cur = Threads::first(); cur != NULL; cur = cur->next()) { | |
385 // make sure all the threads were visited | |
386 assert(cur->was_visited_for_critical_count(), "missed a thread"); | |
387 } | |
388 #endif // ASSERT | |
389 | |
381 // Update the count of active JNI critical regions | 390 // Update the count of active JNI critical regions |
382 GC_locker::set_jni_lock_count(_current_jni_active_count); | 391 GC_locker::set_jni_lock_count(_current_jni_active_count); |
383 | 392 |
384 if (TraceSafepoint) { | 393 if (TraceSafepoint) { |
385 VM_Operation *op = VMThread::vm_operation(); | 394 VM_Operation *op = VMThread::vm_operation(); |
624 // Decrement the number of threads to wait for and signal vm thread | 633 // Decrement the number of threads to wait for and signal vm thread |
625 assert(_waiting_to_block > 0, "sanity check"); | 634 assert(_waiting_to_block > 0, "sanity check"); |
626 _waiting_to_block--; | 635 _waiting_to_block--; |
627 thread->safepoint_state()->set_has_called_back(true); | 636 thread->safepoint_state()->set_has_called_back(true); |
628 | 637 |
638 DEBUG_ONLY(thread->set_visited_for_critical_count(true)); | |
629 if (thread->in_critical()) { | 639 if (thread->in_critical()) { |
630 // Notice that this thread is in a critical section | 640 // Notice that this thread is in a critical section |
631 increment_jni_active_count(); | 641 increment_jni_active_count(); |
632 } | 642 } |
633 | 643 |
905 | 915 |
906 // Some JavaThread states have an initial safepoint state of | 916 // Some JavaThread states have an initial safepoint state of |
907 // running, but are actually at a safepoint. We will happily | 917 // running, but are actually at a safepoint. We will happily |
908 // agree and update the safepoint state here. | 918 // agree and update the safepoint state here. |
909 if (SafepointSynchronize::safepoint_safe(_thread, state)) { | 919 if (SafepointSynchronize::safepoint_safe(_thread, state)) { |
920 SafepointSynchronize::check_for_lazy_critical_native(_thread, state); | |
910 roll_forward(_at_safepoint); | 921 roll_forward(_at_safepoint); |
911 SafepointSynchronize::check_for_lazy_critical_native(_thread, state); | |
912 if (_thread->in_critical()) { | |
913 // Notice that this thread is in a critical section | |
914 SafepointSynchronize::increment_jni_active_count(); | |
915 } | |
916 return; | 922 return; |
917 } | 923 } |
918 | 924 |
919 if (state == _thread_in_vm) { | 925 if (state == _thread_in_vm) { |
920 roll_forward(_call_back); | 926 roll_forward(_call_back); |
935 _type = type; | 941 _type = type; |
936 | 942 |
937 switch(_type) { | 943 switch(_type) { |
938 case _at_safepoint: | 944 case _at_safepoint: |
939 SafepointSynchronize::signal_thread_at_safepoint(); | 945 SafepointSynchronize::signal_thread_at_safepoint(); |
946 DEBUG_ONLY(_thread->set_visited_for_critical_count(true)); | |
947 if (_thread->in_critical()) { | |
948 // Notice that this thread is in a critical section | |
949 SafepointSynchronize::increment_jni_active_count(); | |
950 } | |
940 break; | 951 break; |
941 | 952 |
942 case _call_back: | 953 case _call_back: |
943 set_has_called_back(false); | 954 set_has_called_back(false); |
944 break; | 955 break; |