< prev index next >

src/share/vm/gc/shared/referenceProcessor.cpp

Print this page

        

@@ -444,10 +444,11 @@
   assert(_discovered_addr && discovered->is_oop_or_null(),
          err_msg("Expected an oop or NULL for discovered field at " PTR_FORMAT, p2i(discovered)));
   _next = discovered;
   _referent_addr = java_lang_ref_Reference::referent_addr(_ref);
   _referent = java_lang_ref_Reference::referent(_ref);
+  assert(_referent == oopDesc::bs()->read_barrier(_referent), "expect forwarded referent");
   assert(Universe::heap()->is_in_reserved_or_null(_referent),
          "Wrong oop found in java.lang.Reference object");
   assert(allow_null_referent ?
              _referent->is_oop_or_null()
            : _referent->is_oop(),

@@ -645,10 +646,11 @@
 ReferenceProcessor::clear_discovered_references(DiscoveredList& refs_list) {
   oop obj = NULL;
   oop next = refs_list.head();
   while (next != obj) {
     obj = next;
+    assert(obj == oopDesc::bs()->read_barrier(obj), "expect forwarded obj");
     next = java_lang_ref_Reference::discovered(obj);
     java_lang_ref_Reference::set_discovered_raw(obj, NULL);
   }
   refs_list.set_head(NULL);
   refs_list.set_length(0);

@@ -1092,11 +1094,11 @@
       assert(RefDiscoveryPolicy == ReferenceBasedDiscovery,
              "Unrecognized policy");
       // Check assumption that an object is not potentially
       // discovered twice except by concurrent collectors that potentially
       // trace the same Reference object twice.
-      assert(UseConcMarkSweepGC || UseG1GC,
+      assert(UseConcMarkSweepGC || UseG1GC || UseShenandoahGC,
              "Only possible with a concurrent marking collector");
       return true;
     }
   }
 

@@ -1291,6 +1293,5 @@
      case 4: return "CleanerRef";
    }
    ShouldNotReachHere();
    return NULL;
 }
-
< prev index next >