8224970: ShenandoahRootScanner::roots_do assert is too strong
authorshade
Wed, 29 May 2019 15:25:21 +0200
changeset 55082 335f474becde
parent 55081 dd321e3596c0
child 55083 2fc6027f0eed
8224970: ShenandoahRootScanner::roots_do assert is too strong Reviewed-by: zgu
src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp
--- a/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp	Wed May 29 13:58:05 2019 +0100
+++ b/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp	Wed May 29 15:25:21 2019 +0200
@@ -27,6 +27,7 @@
 #include "gc/shenandoah/shenandoahHeuristics.hpp"
 #include "gc/shenandoah/shenandoahRootProcessor.hpp"
 #include "gc/shenandoah/shenandoahTimingTracker.hpp"
+#include "gc/shenandoah/shenandoahUtils.hpp"
 #include "memory/resourceArea.hpp"
 
 template <typename IsAlive, typename KeepAlive>
@@ -90,9 +91,10 @@
 
 template <typename ITR>
 void ShenandoahRootScanner<ITR>::roots_do(uint worker_id, OopClosure* oops, CLDClosure* clds, CodeBlobClosure* code, ThreadClosure *tc) {
-  assert(!ShenandoahHeap::heap()->unload_classes() ||
+  assert(!ShenandoahSafepoint::is_at_shenandoah_safepoint() ||
+         !ShenandoahHeap::heap()->unload_classes() ||
           ShenandoahHeap::heap()->heuristics()->can_do_traversal_gc(),
-          "No class unloading or traversal GC");
+          "Expect class unloading or traversal when Shenandoah cycle is running");
   ShenandoahParallelOopsDoThreadClosure tc_cl(oops, code, tc);
   ResourceMark rm;