<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <br>
    Hi all,<br>
    <br>
    Can I have a review for this change?<br>
    <br>
    <a class="moz-txt-link-freetext" href="http://cr.openjdk.java.net/~brutisso/8046518/webrev.00/">http://cr.openjdk.java.net/~brutisso/8046518/webrev.00/</a><br>
    <br>
    <a class="moz-txt-link-freetext" href="https://bugs.openjdk.java.net/browse/JDK-8046518">https://bugs.openjdk.java.net/browse/JDK-8046518</a><br>
    <br>
    Background:<br>
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-1">
    When we abort a concurrent cycle due to a Full GC in G1 we call
    ConcurrentMark::abort(). That will set _has_aborted flag and then
    call register_concurrent_cycle_end().
    <br>
    <br>
    The concurrent marking thread will see the _has_aborted flag in its
    ConcurrentMarkThread::run() method, abort the execution and then
    call register_concurrent_cycle_end().
    <br>
    <br>
    Currently this works since the code inside
    register_concurrent_cycle_end() is guarded by
    _concurrent_cycle_started which it then resets. So, the double calls
    will not necessarily result in too much extra work being done. But
    one of the things that register_concurrent_cycle_end() does is to
    call report_gc_end() on the concurrent GC tracer. That prevents
    further use of it for this GC. This means that inside the
    ConcurrentMarkThread::run() method we can not rely on the tracer.
    <br>
    <br>
    Removing the call to register_concurrent_cycle_end() in
    ConcurrentMark::abort() and relying on the call in
    ConcurrentMarkThread::run() seems to be a reasonable approach. <br>
    <br>
    Thanks,<br>
    Bengt<br>
  </body>
</html>