1.1 --- a/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp Tue Jun 14 11:01:10 2011 -0700 1.2 +++ b/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp Wed Jun 15 10:18:04 2011 -0700 1.3 @@ -99,6 +99,18 @@ 1.4 // At this point we are supposed to start a concurrent cycle. We 1.5 // will do so if one is not already in progress. 1.6 bool res = g1h->g1_policy()->force_initial_mark_if_outside_cycle(); 1.7 + 1.8 + // The above routine returns true if we were able to force the 1.9 + // next GC pause to be an initial mark; it returns false if a 1.10 + // marking cycle is already in progress. 1.11 + // 1.12 + // If a marking cycle is already in progress just return and skip 1.13 + // the pause - the requesting thread should block in doit_epilogue 1.14 + // until the marking cycle is complete. 1.15 + if (!res) { 1.16 + assert(_word_size == 0, "ExplicitGCInvokesConcurrent shouldn't be allocating"); 1.17 + return; 1.18 + } 1.19 } 1.20 1.21 _pause_succeeded =