RFR: RP closures should accept NULL referents
Aleksey Shipilev
shade at redhat.com
Fri Feb 23 12:16:00 UTC 2018
http://cr.openjdk.java.net/~shade/shenandoah/refproc-nulls/webrev.01/
Our nightlies show failures like these during regular marking:
# SIGSEGV (0xb) at pc=0x00007fda773cbf3b, pid=79325, tid=79327
#
# Problematic frame:
# V [libjvm.so+0xd7af3b] ShenandoahIsAliveClosure::do_object_b(oopDesc*)+0x6b
Stack: [0x00007fda74ef6000,0x00007fda74ff6000], sp=0x00007fda74ff4b00, free space=1018k
Native frames: (J=compiled Java code, A=aot compiled Java code, j=interpreted, Vv=VM code, C=native
code)
V [libjvm.so+0xd7af3b] ShenandoahIsAliveClosure::do_object_b(oopDesc*)+0x6b
V [libjvm.so+0xbff28d] ReferenceProcessor::discover_reference(oopDesc*, ReferenceType)+0xad
V [libjvm.so+0xd24e0c] void InstanceRefKlass::oop_oop_iterate<true,
ShenandoahMarkRefsClosure>(oopDesc*, ShenandoahMarkRefsClosure*)+0xcec
V [libjvm.so+0xd4cd47] void ShenandoahConcurrentMark::mark_loop_work<ShenandoahMarkRefsClosure,
true, true, true>(ShenandoahMarkRefsClosure*, unsigned short*, unsigned int,
ParallelTaskTerminator*)+0x11f7
V [libjvm.so+0xd54be8] void ShenandoahConcurrentMark::mark_loop_prework<true, true, true>(unsigned
int, ParallelTaskTerminator*, ReferenceProcessor*, bool, bool, bool)+0x398
V [libjvm.so+0xd77824] ShenandoahConcurrentMarkingTask::work(unsigned int)+0x1a4
V [libjvm.so+0xeee39d] GangWorker::loop()+0x4d
V [libjvm.so+0xb77a22] thread_native_entry(Thread*)+0xf2
It seems that we should really accept NULL referents, like the relevant closures in G1 and CMS do,
and we should return "false", to let reference discovery deal with these references accurately. See
analogous code:
bool CMSIsAliveClosure::do_object_b(oop obj) {
HeapWord* addr = (HeapWord*)obj;
return addr != NULL &&
(!_span.contains(addr) || _bit_map->isMarked(addr));
}
bool G1CMIsAliveClosure::do_object_b(oop obj) {
HeapWord* addr = (HeapWord*)obj;
return addr != NULL &&
(!_g1->is_in_g1_reserved(addr) || !_g1->is_obj_ill(obj));
}
Testing: hotspot_gc_shenandoah, new test
Thanks,
-Aleksey
More information about the shenandoah-dev
mailing list