< prev index next >

src/hotspot/share/oops/instanceRefKlass.inline.hpp

Print this page

        

*** 61,78 **** } } template <typename T, class OopClosureType> bool InstanceRefKlass::try_discover(oop obj, ReferenceType type, OopClosureType* closure) { ! ReferenceProcessor* rp = closure->ref_processor(); ! if (rp != NULL) { T referent_oop = RawAccess<>::oop_load((T*)java_lang_ref_Reference::referent_addr_raw(obj)); if (!CompressedOops::is_null(referent_oop)) { oop referent = CompressedOops::decode_not_null(referent_oop); if (!referent->is_gc_marked()) { // Only try to discover if not yet marked. ! return rp->discover_reference(obj, type); } } } return false; } --- 61,78 ---- } } template <typename T, class OopClosureType> bool InstanceRefKlass::try_discover(oop obj, ReferenceType type, OopClosureType* closure) { ! ReferenceDiscoverer* rd = closure->ref_discoverer(); ! if (rd != NULL) { T referent_oop = RawAccess<>::oop_load((T*)java_lang_ref_Reference::referent_addr_raw(obj)); if (!CompressedOops::is_null(referent_oop)) { oop referent = CompressedOops::decode_not_null(referent_oop); if (!referent->is_gc_marked()) { // Only try to discover if not yet marked. ! return rd->discover_reference(obj, type); } } } return false; }
< prev index next >