RFR (9) 8185133: Reference pending list root might not get marked
Thomas Schatzl
thomas.schatzl at oracle.com
Mon Jul 31 13:25:23 UTC 2017
Hi,
On Fri, 2017-07-28 at 14:52 -0400, Kim Barrett wrote:
> >
> > On Jul 28, 2017, at 8:50 AM, Mikael Gerdin <mikael.gerdin at oracle.co
> > m> wrote:
> >
> > Hi all,
> >
> > Please review this fix to a tricky reference processing / conc
> > marking bug affecting G1 in 9.
> >
> > The bug occurs when a weak reference WR is promoted to old
> > and[...] My suggested fix is to explicitly mark the reference
> > pending list
> > head oop during initial mark, after the reference enqueue phase.
> > This mirrors how other roots are handled in initial mark, see
> > G1Mark::G1MarkPromotedFromRoots.
> >
> > Webrev: http://cr.openjdk.java.net/~mgerdin/8185133/webrev.0
> > Bug: https://bugs.openjdk.java.net/browse/JDK-8185133
> >
> > Testing: JPRT, tier2-5 gc tests, a LOT of runs of the failing test.
> >
> > Many thanks to Kim and Erik Ö for discussions around this issue!
> >
> > Thanks
> > /Mikael
> -------------------------------------------------------------------
> -----------
> src/share/vm/memory/universe.cpp
> 499 oop Universe::reference_pending_list() {
> 500 if (Thread::current()->is_VM_thread()) {
> 501 assert_pll_locked(is_locked);
> 502 } else {
> 503 assert_pll_ownership();
> 504 }
> 505 return _reference_pending_list;
> 506 }
>
> I was afraid that conditionalization might be needed.
>
> I think I'd like distinct readers for the different locking context
> use cases. However, I'd be fine with such a distinction being
> deferred to JDK 10.
>
Agree with that this code looks ugly, I agree with Kim that fixing this
can wait. Looks good, and great work.
Thomas
More information about the hotspot-gc-dev
mailing list