src/share/vm/oops/instanceRefKlass.cpp

changeset 1280
df6caf649ff7
parent 791
1ee8caae33af
child 1373
b37c246bf7ce
     1.1 --- a/src/share/vm/oops/instanceRefKlass.cpp	Fri Jul 10 16:01:20 2009 -0700
     1.2 +++ b/src/share/vm/oops/instanceRefKlass.cpp	Tue Jul 14 15:40:39 2009 -0700
     1.3 @@ -28,13 +28,14 @@
     1.4  template <class T>
     1.5  static void specialized_oop_follow_contents(instanceRefKlass* ref, oop obj) {
     1.6    T* referent_addr = (T*)java_lang_ref_Reference::referent_addr(obj);
     1.7 -  oop referent = oopDesc::load_decode_heap_oop(referent_addr);
     1.8 +  T heap_oop = oopDesc::load_heap_oop(referent_addr);
     1.9    debug_only(
    1.10      if(TraceReferenceGC && PrintGCDetails) {
    1.11        gclog_or_tty->print_cr("instanceRefKlass::oop_follow_contents " INTPTR_FORMAT, obj);
    1.12      }
    1.13    )
    1.14 -  if (referent != NULL) {
    1.15 +  if (!oopDesc::is_null(heap_oop)) {
    1.16 +    oop referent = oopDesc::decode_heap_oop_not_null(heap_oop);
    1.17      if (!referent->is_gc_marked() &&
    1.18          MarkSweep::ref_processor()->
    1.19            discover_reference(obj, ref->reference_type())) {
    1.20 @@ -81,13 +82,14 @@
    1.21                                              ParCompactionManager* cm,
    1.22                                              oop obj) {
    1.23    T* referent_addr = (T*)java_lang_ref_Reference::referent_addr(obj);
    1.24 -  oop referent = oopDesc::load_decode_heap_oop(referent_addr);
    1.25 +  T heap_oop = oopDesc::load_heap_oop(referent_addr);
    1.26    debug_only(
    1.27      if(TraceReferenceGC && PrintGCDetails) {
    1.28        gclog_or_tty->print_cr("instanceRefKlass::oop_follow_contents " INTPTR_FORMAT, obj);
    1.29      }
    1.30    )
    1.31 -  if (referent != NULL) {
    1.32 +  if (!oopDesc::is_null(heap_oop)) {
    1.33 +    oop referent = oopDesc::decode_heap_oop_not_null(heap_oop);
    1.34      if (PSParallelCompact::mark_bitmap()->is_unmarked(referent) &&
    1.35          PSParallelCompact::ref_processor()->
    1.36            discover_reference(obj, ref->reference_type())) {
    1.37 @@ -182,9 +184,10 @@
    1.38    }                                                                             \
    1.39                                                                                  \
    1.40    T* referent_addr = (T*)java_lang_ref_Reference::referent_addr(obj);           \
    1.41 -  oop referent = oopDesc::load_decode_heap_oop(referent_addr);                  \
    1.42 -  if (referent != NULL && contains(referent_addr)) {                            \
    1.43 +  T heap_oop = oopDesc::load_heap_oop(referent_addr);                           \
    1.44 +  if (!oopDesc::is_null(heap_oop) && contains(referent_addr)) {                 \
    1.45      ReferenceProcessor* rp = closure->_ref_processor;                           \
    1.46 +    oop referent = oopDesc::decode_heap_oop_not_null(heap_oop);                 \
    1.47      if (!referent->is_gc_marked() && (rp != NULL) &&                            \
    1.48          rp->discover_reference(obj, reference_type())) {                        \
    1.49        return size;                                                              \

mercurial