--- old/src/hotspot/share/gc/shared/barrierSet.cpp 2018-12-09 03:18:57.010567139 -0500 +++ new/src/hotspot/share/gc/shared/barrierSet.cpp 2018-12-09 03:18:56.598545320 -0500 @@ -26,47 +26,24 @@ #include "gc/shared/barrierSet.hpp" #include "gc/shared/barrierSetAssembler.hpp" #include "runtime/thread.hpp" +#include "utilities/debug.hpp" #include "utilities/macros.hpp" BarrierSet* BarrierSet::_barrier_set = NULL; -class SetBarrierSetNonJavaThread : public ThreadClosure { - BarrierSet* _barrier_set; - size_t _count; - -public: - SetBarrierSetNonJavaThread(BarrierSet* barrier_set) : - _barrier_set(barrier_set), _count(0) {} - - virtual void do_thread(Thread* thread) { - _barrier_set->on_thread_create(thread); - ++_count; - } - - size_t count() const { return _count; } -}; - void BarrierSet::set_barrier_set(BarrierSet* barrier_set) { assert(_barrier_set == NULL, "Already initialized"); _barrier_set = barrier_set; - // Some threads are created before the barrier set, so the call to - // BarrierSet::on_thread_create had to be deferred for them. Now that - // we have the barrier set, do those deferred calls. - - // First do any non-JavaThreads. - SetBarrierSetNonJavaThread njt_closure(_barrier_set); - Threads::non_java_threads_do(&njt_closure); - - // Do the current (main) thread. Ensure it's the one and only - // JavaThread so far. Also verify that it isn't yet on the thread + // Notify barrier set of the current (main) thread. Normally the + // Thread constructor deals with this, but the main thread is + // created before we get here. Verify it isn't yet on the thread // list, else we'd also need to call BarrierSet::on_thread_attach. + // This is the only thread that can exist at this point; the Thread + // constructor objects to other threads being created before the + // barrier set is available. assert(Thread::current()->is_Java_thread(), "Expected main thread to be a JavaThread"); - assert((njt_closure.count() + 1) == Threads::threads_before_barrier_set(), - "Unexpected JavaThreads before barrier set initialization: " - "Non-JavaThreads: " SIZE_FORMAT ", all: " SIZE_FORMAT, - njt_closure.count(), Threads::threads_before_barrier_set()); assert(!JavaThread::current()->on_thread_list(), "Main thread already on thread list."); _barrier_set->on_thread_create(Thread::current());