# HG changeset patch # User rkennke # Date 1552580167 -3600 # Thu Mar 14 17:16:07 2019 +0100 # Node ID 794f7b9338997e436792819f0f1994f230cccce6 # Parent 6bf8877eb1b91ecab741cc15ba6b93ea450a4f86 [mq]: JDK-8220671.patch diff --git a/src/hotspot/share/gc/g1/g1BarrierSet.cpp b/src/hotspot/share/gc/g1/g1BarrierSet.cpp --- a/src/hotspot/share/gc/g1/g1BarrierSet.cpp +++ b/src/hotspot/share/gc/g1/g1BarrierSet.cpp @@ -165,6 +165,7 @@ // and indeed usually does, occur during a safepoint. But such // creation isn't concurrent with updating the global SATB active // state. + SuspendibleThreadSetJoiner sts_join(thread->is_StringDedup_thread()); bool is_satb_active = _satb_mark_queue_set.is_active(); G1ThreadLocalData::satb_mark_queue(thread).set_active(is_satb_active); } diff --git a/src/hotspot/share/gc/shared/stringdedup/stringDedupThread.hpp b/src/hotspot/share/gc/shared/stringdedup/stringDedupThread.hpp --- a/src/hotspot/share/gc/shared/stringdedup/stringDedupThread.hpp +++ b/src/hotspot/share/gc/shared/stringdedup/stringDedupThread.hpp @@ -43,6 +43,8 @@ StringDedupThread(); ~StringDedupThread(); + virtual bool is_StringDedup_thread() const { return true; } + void print_start(const StringDedupStat* last_stat); void print_end(const StringDedupStat* last_stat, const StringDedupStat* total_stat); diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp --- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.cpp @@ -355,11 +355,12 @@ SATBMarkQueue& queue = ShenandoahThreadLocalData::satb_mark_queue(thread); assert(!queue.is_active(), "SATB queue should not be active"); assert( queue.is_empty(), "SATB queue should be empty"); - queue.set_active(_satb_mark_queue_set.is_active()); if (thread->is_Java_thread()) { ShenandoahThreadLocalData::set_gc_state(thread, _heap->gc_state()); ShenandoahThreadLocalData::initialize_gclab(thread); } + SuspendibleThreadSetJoiner sts_join(thread->is_StringDedup_thread()); + queue.set_active(_satb_mark_queue_set.is_active()); } void ShenandoahBarrierSet::on_thread_detach(Thread *thread) { diff --git a/src/hotspot/share/runtime/thread.hpp b/src/hotspot/share/runtime/thread.hpp --- a/src/hotspot/share/runtime/thread.hpp +++ b/src/hotspot/share/runtime/thread.hpp @@ -484,6 +484,7 @@ // True iff the thread can perform GC operations at a safepoint. // Generally will be true only of VM thread and parallel GC WorkGang // threads. + virtual bool is_StringDedup_thread() const { return false; } virtual bool is_GC_task_thread() const { return false; } virtual bool is_Watcher_thread() const { return false; } virtual bool is_ConcurrentGC_thread() const { return false; }