RFR (XS) 8223570: Shenandoah needs to acquire lock before CLDG::clear_claimed_marks

Aleksey Shipilev shade at redhat.com
Wed May 8 11:39:00 UTC 2019


Bug:
  https://bugs.openjdk.java.net/browse/JDK-8223570

New assert fails and exposes this legit GC bug. Shenandoah does CLDG::clear_claimed_marks in two
places, one under the safepoint (which is fine for that assert), and another one in concurrent
thread, which fails.

Fix:

diff -r 845f5a35241b src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp
--- a/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp Wed May 08 06:40:45 2019 -0400
+++ b/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp Wed May 08 13:36:56 2019 +0200
@@ -552,11 +552,14 @@
 }

 void ShenandoahTraversalGC::concurrent_traversal_collection() {
-  ClassLoaderDataGraph::clear_claimed_marks();
+  {
+    MutexLocker ml(ClassLoaderDataGraph_lock);
+    ClassLoaderDataGraph::clear_claimed_marks();
+  }

   ShenandoahGCPhase phase_work(ShenandoahPhaseTimings::conc_traversal);
   if (!_heap->cancelled_gc()) {

Testing: hotspot_gc_shenandoah (running)

-- 
Thanks,
-Aleksey




More information about the shenandoah-dev mailing list