--- a/src/hotspot/share/gc/g1/g1BarrierSet.cpp Mon Apr 01 11:02:40 2019 -0700
+++ b/src/hotspot/share/gc/g1/g1BarrierSet.cpp Mon Apr 01 17:11:38 2019 -0400
@@ -148,24 +148,7 @@
// If we are creating the thread during a marking cycle, we should
// set the active field of the SATB queue to true. That involves
- // copying the global is_active value to this thread's queue, which
- // is done without any direct synchronization here.
- //
- // The activation and deactivation of the SATB queues occurs at the
- // beginning / end of a marking cycle, and is done during
- // safepoints. This function is called just before a thread is
- // added to its corresponding threads list (for Java or non-Java
- // threads, respectively).
- //
- // For Java threads, that's done while holding the Threads_lock,
- // which ensures we're not at a safepoint, so reading the global
- // is_active state is synchronized against update.
- assert(!thread->is_Java_thread() || !SafepointSynchronize::is_at_safepoint(),
- "Should not be at a safepoint");
- // For non-Java threads, thread creation (and list addition) may,
- // and indeed usually does, occur during a safepoint. But such
- // creation isn't concurrent with updating the global SATB active
- // state.
+ // copying the global is_active value to this thread's queue.
bool is_satb_active = _satb_mark_queue_set.is_active();
G1ThreadLocalData::satb_mark_queue(thread).set_active(is_satb_active);
}