Tue, 18 Nov 2014 00:56:42 +0000
Merge
1.1 --- a/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp Mon Nov 10 19:28:51 2014 -0500 1.2 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp Tue Nov 18 00:56:42 2014 +0000 1.3 @@ -50,8 +50,12 @@ 1.4 void VM_CMS_Operation::acquire_pending_list_lock() { 1.5 // The caller may block while communicating 1.6 // with the SLT thread in order to acquire/release the PLL. 1.7 - ConcurrentMarkSweepThread::slt()-> 1.8 - manipulatePLL(SurrogateLockerThread::acquirePLL); 1.9 + SurrogateLockerThread* slt = ConcurrentMarkSweepThread::slt(); 1.10 + if (slt != NULL) { 1.11 + slt->manipulatePLL(SurrogateLockerThread::acquirePLL); 1.12 + } else { 1.13 + SurrogateLockerThread::report_missing_slt(); 1.14 + } 1.15 } 1.16 1.17 void VM_CMS_Operation::release_and_notify_pending_list_lock() {
2.1 --- a/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp Mon Nov 10 19:28:51 2014 -0500 2.2 +++ b/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp Tue Nov 18 00:56:42 2014 +0000 2.3 @@ -213,8 +213,12 @@ 2.4 assert(_needs_pll, "don't call this otherwise"); 2.5 // The caller may block while communicating 2.6 // with the SLT thread in order to acquire/release the PLL. 2.7 - ConcurrentMarkThread::slt()-> 2.8 - manipulatePLL(SurrogateLockerThread::acquirePLL); 2.9 + SurrogateLockerThread* slt = ConcurrentMarkThread::slt(); 2.10 + if (slt != NULL) { 2.11 + slt->manipulatePLL(SurrogateLockerThread::acquirePLL); 2.12 + } else { 2.13 + SurrogateLockerThread::report_missing_slt(); 2.14 + } 2.15 } 2.16 2.17 void VM_CGC_Operation::release_and_notify_pending_list_lock() {
3.1 --- a/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp Mon Nov 10 19:28:51 2014 -0500 3.2 +++ b/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp Tue Nov 18 00:56:42 2014 +0000 3.3 @@ -137,6 +137,13 @@ 3.4 return res; 3.5 } 3.6 3.7 +void SurrogateLockerThread::report_missing_slt() { 3.8 + vm_exit_during_initialization( 3.9 + "GC before GC support fully initialized: " 3.10 + "SLT is needed but has not yet been created."); 3.11 + ShouldNotReachHere(); 3.12 +} 3.13 + 3.14 void SurrogateLockerThread::manipulatePLL(SLT_msg_type msg) { 3.15 MutexLockerEx x(&_monitor, Mutex::_no_safepoint_check_flag); 3.16 assert(_buffer == empty, "Should be empty");
4.1 --- a/src/share/vm/gc_implementation/shared/concurrentGCThread.hpp Mon Nov 10 19:28:51 2014 -0500 4.2 +++ b/src/share/vm/gc_implementation/shared/concurrentGCThread.hpp Tue Nov 18 00:56:42 2014 +0000 4.3 @@ -93,6 +93,9 @@ 4.4 public: 4.5 static SurrogateLockerThread* make(TRAPS); 4.6 4.7 + // Terminate VM with error message that SLT needed but not yet created. 4.8 + static void report_missing_slt(); 4.9 + 4.10 SurrogateLockerThread(); 4.11 4.12 bool is_hidden_from_external_view() const { return true; }
5.1 --- a/src/share/vm/runtime/interfaceSupport.cpp Mon Nov 10 19:28:51 2014 -0500 5.2 +++ b/src/share/vm/runtime/interfaceSupport.cpp Tue Nov 18 00:56:42 2014 +0000 5.3 @@ -85,7 +85,7 @@ 5.4 // Short-circuit any possible re-entrant gc-a-lot attempt 5.5 if (thread->skip_gcalot()) return; 5.6 5.7 - if (is_init_completed()) { 5.8 + if (Threads::is_vm_complete()) { 5.9 5.10 if (++_fullgc_alot_invocation < FullGCALotStart) { 5.11 return;