RFR: Root processors SEGV when executed outside VM operation

Roman Kennke rkennke at redhat.com
Mon May 29 12:12:01 UTC 2017


Ugh. Yes!

Am 29. Mai 2017 14:07:29 MESZ schrieb Aleksey Shipilev <shade at redhat.com>:
>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

-- 
Sent from my FairPhone


More information about the shenandoah-dev mailing list