RFR (S): 8011699: CMS: assert(_shared_gc_info.id() != SharedGCInfo::UNSET_GCID) failed: GC not started?

Stefan Karlsson stefan.karlsson at oracle.com
Wed Apr 10 14:34:10 UTC 2013


On 04/10/2013 03:15 PM, Erik Helin wrote:
> 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/

Looks good.

StefanK

>
> Bug:
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8011699
>
> Thanks,
> Erik




More information about the hotspot-gc-dev mailing list