RFR: Root processors SEGV when executed outside VM operation

Aleksey Shipilev shade at redhat.com
Mon May 29 12:07:29 UTC 2017


Parallel safepoint cleanup makes our build SEGV when verification is turned on.
This is because "vm_operation()" can be NULL on those paths.

Fix:

$ hg diff
diff -r b67661c7315a src/share/vm/gc/shenandoah/shenandoahRootProcessor.cpp
--- a/src/share/vm/gc/shenandoah/shenandoahRootProcessor.cpp	Wed May 24 10:41:56
2017 +0200
+++ b/src/share/vm/gc/shenandoah/shenandoahRootProcessor.cpp	Mon May 29 14:06:06
2017 +0200
@@ -49,7 +49,7 @@
 {
   heap->shenandoahPolicy()->record_workers_start(_phase);
   VM_ShenandoahOperation* op = (VM_ShenandoahOperation*) VMThread::vm_operation();
-  if (! op->_safepoint_cleanup_done) {
+  if (op == NULL || !op->_safepoint_cleanup_done) {
     _threads_nmethods_cl = NMethodSweeper::prepare_mark_active_nmethods();
   }
 }
@@ -58,7 +58,9 @@
   delete _process_strong_tasks;
   ShenandoahHeap::heap()->shenandoahPolicy()->record_workers_end(_phase);
   VM_ShenandoahOperation* op = (VM_ShenandoahOperation*) VMThread::vm_operation();
-  op->_safepoint_cleanup_done = true;
+  if (op != NULL) {
+    op->_safepoint_cleanup_done = true;
+  }
 }

 void ShenandoahRootProcessor::process_strong_roots(OopClosure* oops,
@@ -185,7 +187,7 @@
 {
   heap->shenandoahPolicy()->record_workers_start(_phase);
   VM_ShenandoahOperation* op = (VM_ShenandoahOperation*) VMThread::vm_operation();
-  if (! op->_safepoint_cleanup_done) {
+  if (op == NULL || !op->_safepoint_cleanup_done) {
     _threads_nmethods_cl = NMethodSweeper::prepare_mark_active_nmethods();
   }
 }
@@ -194,7 +196,9 @@
   delete _process_strong_tasks;
   ShenandoahHeap::heap()->shenandoahPolicy()->record_workers_end(_phase);
   VM_ShenandoahOperation* op = (VM_ShenandoahOperation*) VMThread::vm_operation();
-  op->_safepoint_cleanup_done = true;
+  if (op != NULL) {
+    op->_safepoint_cleanup_done = true;
+  }
 }

 void ShenandoahRootEvacuator::process_evacuate_roots(OopClosure* oops,


Testing: hotspot_gc_shenandoah

-Aleksey



More information about the shenandoah-dev mailing list