RFR(S): 8040803: G1: Concurrent mark hangs when mark stack overflows
bengt.rutisson at oracle.com
Fri May 2 08:33:54 UTC 2014
On 2014-04-30 15:04, Per Liden wrote:
> Could I please have a couple of reviews in this bug fix:
> Summary: G1's concurrent marking can potentially hang forever if the
> global mark stack overflows and immediately after that a Full GC
> happens, which tries to abort the marking. The reason is that there's
> a race between detecting the overflow situation and detecting the
> abort signal. Threads detecting the overflow situation first will go
> into the overflow protocol and wait on a barrier for all threads to
> reach this state. However, threads detecting the abort signal first
> will terminate and never participate in the barrier.
> This patch introduces an abort state and function on the
> WorkGangBarrierSync class, to unblock any threads waiting for the
> barrier to complete when the concurrent mark is aborted.
> Bug: https://bugs.openjdk.java.net/browse/JDK-8040803
> Webrev: http://cr.openjdk.java.net/~pliden/8040803/webrev.0/
The change looks good.
One minor improvement would be to try to use an early exit in
ConcurrentMark::enter_first_sync_barrier() when the barrier fails.
More information about the hotspot-gc-dev