RFR (S): 8011699: CMS: assert(_shared_gc_info.id() != SharedGCInfo::UNSET_GCID) failed: GC not started?
Erik Helin
erik.helin at oracle.com
Wed Apr 10 13:15:10 UTC 2013
Hi all,
this change fixes an issue with the reporting of concurrent mode failure
for the trace framework for CMS.
The problem was that a background collection in CMS (the function
collect_in_background) updated _collectorState to InitialMark before the
method report_gc_start was called on the CMS GC tracer. If the
background GC was aborted before the call to report_gc_start, we would
then report concurrent mode failure on a GC tracer that is not started
(an invalid state for a GC tracer).
The fix is to move the call to report_gc_start to the same place in
collect_in_background as where _collectorState is updated. However, this
means that the heap_summary_before_gc event must be sent from
checkpointRootsInitialPre due to lock ordering (Metaspace lock and CGC
lock). Furthermore, collect_in_foreground must ensure that it does not
call report_gc_start a second time (in the case when
collect_in_foreground takes over a background GC).
Webrev:
http://cr.openjdk.java.net/~ehelin/8011699/webrev.00/
Bug:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8011699
Thanks,
Erik
More information about the hotspot-gc-dev
mailing list