< prev index next >

src/share/vm/oops/oop.pcgc.inline.hpp

Print this page

        

*** 52,81 **** assert (PSParallelCompact::mark_bitmap()->is_marked(this), "should be marked"); klass()->oop_follow_contents(cm, this); } - inline oop oopDesc::forward_to_atomic(oop p) { - assert(ParNewGeneration::is_legal_forward_ptr(p), - "illegal forwarding pointer value."); - markOop oldMark = mark(); - markOop forwardPtrMark = markOopDesc::encode_pointer_as_mark(p); - markOop curMark; - - assert(forwardPtrMark->decode_pointer() == p, "encoding must be reversable"); - assert(sizeof(markOop) == sizeof(intptr_t), "CAS below requires this."); - - while (!oldMark->is_marked()) { - curMark = (markOop)Atomic::cmpxchg_ptr(forwardPtrMark, &_mark, oldMark); - assert(is_forwarded(), "object should have been forwarded"); - if (curMark == oldMark) { - return NULL; - } - // If the CAS was unsuccessful then curMark->is_marked() - // should return true as another thread has CAS'd in another - // forwarding pointer. - oldMark = curMark; - } - return forwardee(); - } - #endif // SHARE_VM_OOPS_OOP_PCGC_INLINE_HPP --- 52,57 ----
< prev index next >