CRR: 7034139: G1: assert(Thread::current()->is_ConcurrentGC_thread()) failed: only a conc GC thread can call this (S)
Tony Printezis
tony.printezis at oracle.com
Tue Apr 12 19:36:46 UTC 2011
Hi,
Could I get a couple of people to look at this? (I'd like to push this
this week if possible)
http://cr.openjdk.java.net/~tonyp/7034139/webrev.0/
The actual fix is reasonably small (leave / join the
SuspendibleThreadSet only if we are in concurrent mode). Most of the
changes are new infrastructure to cause a fixed number of overflows
during marking (in non-product builds of course) to stress the overflow
code. This was the only way I could reliably reproduce the failure. This
did uncover a couple of extra issues which I also fixed:
- If we overflow during remark we should not actually deal with it
during remark but we should abort the remark pause and restart a
concurrent mark phase. For some reason we were not doing that. I fixed
that (for this I had to ensure that the overflow flag is not cleared
when we exit the do_marking_step() method).
- Because we were clearing the overflow, it was also possible that the
workers would deadlock (for that to happen a worker had to finish
handling one overflow and immediately raise another one, so it was
highly unlikely to occur in prcatice; good to find it and eliminate it
though).
I've already tested it, I'll run more tests overnight.
Tony
More information about the hotspot-gc-dev
mailing list