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