< prev index next >

src/share/vm/runtime/synchronizer.cpp

Print this page
rev 13331 : Simplify parallel synchronizer roots iterator.

*** 128,138 **** static void post_monitor_inflate_event(EventJavaMonitorInflate&, const oop, const ObjectSynchronizer::InflateCause); #define CHAINMARKER (cast_to_oop<intptr_t>(-1)) - #define CLAIMEDMARKER (cast_to_oop<intptr_t>(-2)) // =====================> Quick functions // The quick_* forms are special fast-path variants used to improve --- 128,137 ----
*** 1946,1966 **** PaddedEnd<ObjectMonitor>* my_cur = (PaddedEnd<ObjectMonitor>*)_cur; PaddedEnd<ObjectMonitor>* next_block; while (true) { if (my_cur == NULL) return NULL; ! ! if (my_cur->object() == CHAINMARKER) { ! if (my_cur->cas_set_object(CLAIMEDMARKER, CHAINMARKER) == CHAINMARKER) { ! return (void*)my_cur; ! } } else { ! assert(my_cur->object() == CLAIMEDMARKER, "Must be"); } - - next_block = (PaddedEnd<ObjectMonitor> *)next(my_cur); - my_cur = (PaddedEnd<ObjectMonitor> *)Atomic::cmpxchg_ptr(next_block, &_cur, my_cur); } } bool ParallelObjectSynchronizerIterator::parallel_oops_do(OopClosure* f) { PaddedEnd<ObjectMonitor>* block = (PaddedEnd<ObjectMonitor>*)claim(); --- 1945,1963 ---- PaddedEnd<ObjectMonitor>* my_cur = (PaddedEnd<ObjectMonitor>*)_cur; PaddedEnd<ObjectMonitor>* next_block; while (true) { if (my_cur == NULL) return NULL; ! next_block = (PaddedEnd<ObjectMonitor> *)next(my_cur); ! void* cas_result = Atomic::cmpxchg_ptr(next_block, &_cur, my_cur); ! if (my_cur == cas_result) { ! // We succeeded. ! return (void*) my_cur; } else { ! // We failed. Retry with offending CAS result. ! my_cur = (PaddedEnd<ObjectMonitor>*) cas_result; } } } bool ParallelObjectSynchronizerIterator::parallel_oops_do(OopClosure* f) { PaddedEnd<ObjectMonitor>* block = (PaddedEnd<ObjectMonitor>*)claim();
< prev index next >