<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<br>
Hi all,<br>
<br>
I'm withdrawing this review request. I closed the bug as will not
fix.<br>
<br>
Bengt<br>
<br>
<br>
<div class="moz-cite-prefix">On 2014-06-11 16:22, Bengt Rutisson
wrote:<br>
</div>
<blockquote cite="mid:5398662D.5000600@oracle.com" type="cite">
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
<div class="moz-cite-prefix"><br>
Hi Stefan,<br>
<br>
Thanks for looking at this!<br>
<br>
On 6/11/14 1:10 PM, Stefan Karlsson wrote:<br>
</div>
<blockquote cite="mid:53983933.2020204@oracle.com" type="cite">
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
<br>
<div class="moz-cite-prefix">On 2014-06-11 12:33, Bengt Rutisson
wrote:<br>
</div>
<blockquote cite="mid:5398305D.7070800@oracle.com" type="cite">
<meta http-equiv="content-type" content="text/html;
charset=ISO-8859-1">
<br>
Hi all,<br>
<br>
Can I have a review for this change?<br>
<br>
<a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://cr.openjdk.java.net/%7Ebrutisso/8046518/webrev.00/">http://cr.openjdk.java.net/~brutisso/8046518/webrev.00/</a><br>
<br>
<a moz-do-not-send="true" 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>
</blockquote>
<br>
The double call was deliberately put there to make sure that we
end the tracing of the concurrent GC before starting to trace
teh Full GC. </blockquote>
<br>
I figured there was a reason. I just couldn't remember. We would
get overlapping GC events without this extra call. Thanks for
pointing that out!<br>
<br>
<blockquote cite="mid:53983933.2020204@oracle.com" type="cite">Why
do you need to change this? I guess it has to do with your other
GCId changes?<br>
</blockquote>
<br>
Right. It is for the GCId change. The problem is that calling
register_concurrent_cycle_end() will reset the GCId to be -1. When
we get to the logging, which is done in
ConcurrentMarkThread::run(), I want to add the GCId to this log
entry:<br>
<br>
if (cm()->has_aborted()) {<br>
if (G1Log::fine()) {<br>
gclog_or_tty->gclog_stamp(g1h->gc_tracer_cm()->gc_id());<br>
gclog_or_tty->print_cr("[GC concurrent-mark-abort]");<br>
}<br>
}<br>
<br>
But with the current code the GCId is always -1 here.<br>
<br>
I guess one workaround I can do is to in abort() store the last
aborted GC id and use that for logging. It just seems a bit
fragile that we reset the concurrent gc tracer while we still have
the concurrent mark running.<br>
<br>
Bengt<br>
<br>
<br>
<blockquote cite="mid:53983933.2020204@oracle.com" type="cite"> <br>
thanks,<br>
StefanK<br>
<br>
<blockquote cite="mid:5398305D.7070800@oracle.com" type="cite">
<br>
Thanks,<br>
Bengt<br>
</blockquote>
<br>
</blockquote>
<br>
</blockquote>
<br>
</body>
</html>