<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>