# HG changeset patch # User rkennke # Date 1494424049 -7200 # Wed May 10 15:47:29 2017 +0200 # Node ID aea4d9f53c58d6f9ebafd72b96c5e02d4eeb6179 # Parent 4ee5b7c8a8ac716f5e7de3ce4fc3d547fae37e47 Simplify parallel synchronizer roots iterator. diff --git a/src/share/vm/gc/shenandoah/shenandoahHeap.cpp b/src/share/vm/gc/shenandoah/shenandoahHeap.cpp --- a/src/share/vm/gc/shenandoah/shenandoahHeap.cpp +++ b/src/share/vm/gc/shenandoah/shenandoahHeap.cpp @@ -2406,6 +2406,9 @@ partial_gc()->do_partial_collection(); } +ShenandoahUpdateHeapRefsSuperClosure::ShenandoahUpdateHeapRefsSuperClosure() : + _heap(ShenandoahHeap::heap()) {} + template class ShenandoahUpdateHeapRefsTask : public AbstractGangTask { private: diff --git a/src/share/vm/gc/shenandoah/shenandoahOopClosures.hpp b/src/share/vm/gc/shenandoah/shenandoahOopClosures.hpp --- a/src/share/vm/gc/shenandoah/shenandoahOopClosures.hpp +++ b/src/share/vm/gc/shenandoah/shenandoahOopClosures.hpp @@ -169,8 +169,7 @@ private: ShenandoahHeap* _heap; public: - ShenandoahUpdateHeapRefsSuperClosure() : - _heap(ShenandoahHeap::heap()) {} + ShenandoahUpdateHeapRefsSuperClosure(); template void work(T *p); diff --git a/src/share/vm/runtime/objectMonitor.cpp b/src/share/vm/runtime/objectMonitor.cpp --- a/src/share/vm/runtime/objectMonitor.cpp +++ b/src/share/vm/runtime/objectMonitor.cpp @@ -2444,10 +2444,6 @@ "Fatal error(s) found in ObjectMonitor::sanity_checks()"); } -void* ObjectMonitor::cas_set_object(void* obj, void* expected) { - return Atomic::cmpxchg_ptr(obj, (volatile void*)&_object, expected); -} - #ifndef PRODUCT void ObjectMonitor::verify() { } diff --git a/src/share/vm/runtime/objectMonitor.hpp b/src/share/vm/runtime/objectMonitor.hpp --- a/src/share/vm/runtime/objectMonitor.hpp +++ b/src/share/vm/runtime/objectMonitor.hpp @@ -307,7 +307,6 @@ void* object() const; void* object_addr(); void set_object(void* obj); - void* cas_set_object(void* obj, void* expected_obj); bool check(TRAPS); // true if the thread owns the monitor. void check_slow(TRAPS); diff --git a/src/share/vm/runtime/synchronizer.cpp b/src/share/vm/runtime/synchronizer.cpp --- a/src/share/vm/runtime/synchronizer.cpp +++ b/src/share/vm/runtime/synchronizer.cpp @@ -130,7 +130,6 @@ const ObjectSynchronizer::InflateCause); #define CHAINMARKER (cast_to_oop(-1)) -#define CLAIMEDMARKER (cast_to_oop(-2)) // =====================> Quick functions @@ -1948,17 +1947,15 @@ 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; - } + next_block = (PaddedEnd *)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 { - assert(my_cur->object() == CLAIMEDMARKER, "Must be"); + // We failed. Retry with offending CAS result. + my_cur = (PaddedEnd*) cas_result; } - - next_block = (PaddedEnd *)next(my_cur); - my_cur = (PaddedEnd *)Atomic::cmpxchg_ptr(next_block, &_cur, my_cur); } } @@ -1975,4 +1972,4 @@ return true; } return false; -} \ No newline at end of file +}