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