src/share/vm/gc_implementation/g1/vm_operations_g1.cpp

changeset 2970
5130fa1b24f1
parent 2708
1d1603768966
child 3114
20213c8a3c40
     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 =

mercurial