RFR (sh/8): Fix lock ordering issue when calling JVMTI GetLoadedClasses during marking

Zhengyu Gu zgu at redhat.com
Thu Nov 14 21:47:12 UTC 2019


Good to me.

Thanks,

-Zhengyu

On 11/14/19 4:43 PM, Roman Kennke wrote:
> Alexey Genus reported a lock ordering issue involving JVMTI
> GetLoadedClasses() during concurrent marking.
> 
> ClassLoaderData::loaded_classes_do() acquires the "Metaspace allocation
> lock/5" and LoadedClassesClosure tries to enqueue it into G1's SATB
> queue, thus attempts to acquire "SATB_Q_CBL_mon/16"
> 
> It is not Shenandoah specific, but would also affect G1. See discussion
> and G1 testcase:
> https://bugs.openjdk.java.net/browse/JDK-8234096
> 
> However, it is jdk8u specific. It's been fixed in jdk10 timeframe by
> making loaded-classes-iteration lock-free.
> 
> As far as I can tell, it is not fatal in release build, but it seems
> prudent to fix it anyway, especially because the fix is not difficult.
> Simply not enqueue the oops during loaded_classes_do() but instead
> during extraction of the jclasses, where the Metaspace allocation lock
> is not held.
> 
> While this could go completely via upstream jdk8u, I'd like to push this
> in Shenandoah first, to get it into the hands of Alexey for testing, and
> to bake it a little.
> 
> Webrev:
> http://cr.openjdk.java.net/~rkennke/JDK-8234096-shenandoah/webrev.00/
> 
> Testing: The provided testcase fails without the fix, and passes with
> the fix. hotspot_gc_shenandoah looks good.
> 
> Ok to push?
> 
> Roman
> 



More information about the shenandoah-dev mailing list