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
Wed Apr 20 19:56:57 UTC 2011


Hi all,

I'd still like a couple of code reviews for this. Here's the latest 
version (I only rephrased a couple of comments, so if you're looking at 
the earlier version already you can ignore this one):

http://cr.openjdk.java.net/~tonyp/7034139/webrev.1/

Tony

Tony Printezis wrote:
> 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