changeset 7400:f84125b6f69a

Merge
author jiangli
date Tue, 18 Nov 2014 00:56:42 +0000
parents 3375833a603e (current diff) b00e231d3cb2 (diff)
children 600c44255e5f
files
diffstat 5 files changed, 23 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp	Mon Nov 10 19:28:51 2014 -0500
+++ b/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp	Tue Nov 18 00:56:42 2014 +0000
@@ -50,8 +50,12 @@
 void VM_CMS_Operation::acquire_pending_list_lock() {
   // The caller may block while communicating
   // with the SLT thread in order to acquire/release the PLL.
-  ConcurrentMarkSweepThread::slt()->
-    manipulatePLL(SurrogateLockerThread::acquirePLL);
+  SurrogateLockerThread* slt = ConcurrentMarkSweepThread::slt();
+  if (slt != NULL) {
+    slt->manipulatePLL(SurrogateLockerThread::acquirePLL);
+  } else {
+    SurrogateLockerThread::report_missing_slt();
+  }
 }
 
 void VM_CMS_Operation::release_and_notify_pending_list_lock() {
--- a/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp	Mon Nov 10 19:28:51 2014 -0500
+++ b/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp	Tue Nov 18 00:56:42 2014 +0000
@@ -213,8 +213,12 @@
   assert(_needs_pll, "don't call this otherwise");
   // The caller may block while communicating
   // with the SLT thread in order to acquire/release the PLL.
-  ConcurrentMarkThread::slt()->
-    manipulatePLL(SurrogateLockerThread::acquirePLL);
+  SurrogateLockerThread* slt = ConcurrentMarkThread::slt();
+  if (slt != NULL) {
+    slt->manipulatePLL(SurrogateLockerThread::acquirePLL);
+  } else {
+    SurrogateLockerThread::report_missing_slt();
+  }
 }
 
 void VM_CGC_Operation::release_and_notify_pending_list_lock() {
--- a/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp	Mon Nov 10 19:28:51 2014 -0500
+++ b/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp	Tue Nov 18 00:56:42 2014 +0000
@@ -137,6 +137,13 @@
   return res;
 }
 
+void SurrogateLockerThread::report_missing_slt() {
+  vm_exit_during_initialization(
+    "GC before GC support fully initialized: "
+    "SLT is needed but has not yet been created.");
+  ShouldNotReachHere();
+}
+
 void SurrogateLockerThread::manipulatePLL(SLT_msg_type msg) {
   MutexLockerEx x(&_monitor, Mutex::_no_safepoint_check_flag);
   assert(_buffer == empty, "Should be empty");
--- a/src/share/vm/gc_implementation/shared/concurrentGCThread.hpp	Mon Nov 10 19:28:51 2014 -0500
+++ b/src/share/vm/gc_implementation/shared/concurrentGCThread.hpp	Tue Nov 18 00:56:42 2014 +0000
@@ -93,6 +93,9 @@
  public:
   static SurrogateLockerThread* make(TRAPS);
 
+  // Terminate VM with error message that SLT needed but not yet created.
+  static void report_missing_slt();
+
   SurrogateLockerThread();
 
   bool is_hidden_from_external_view() const     { return true; }
--- a/src/share/vm/runtime/interfaceSupport.cpp	Mon Nov 10 19:28:51 2014 -0500
+++ b/src/share/vm/runtime/interfaceSupport.cpp	Tue Nov 18 00:56:42 2014 +0000
@@ -85,7 +85,7 @@
   // Short-circuit any possible re-entrant gc-a-lot attempt
   if (thread->skip_gcalot()) return;
 
-  if (is_init_completed()) {
+  if (Threads::is_vm_complete()) {
 
     if (++_fullgc_alot_invocation < FullGCALotStart) {
       return;