< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.cpp

Print this page
@@ -40,10 +40,11 @@
  #include "memory/iterator.hpp"
  #include "memory/resourceArea.hpp"
  #include "memory/universe.hpp"
  #include "runtime/thread.hpp"
  #include "services/management.hpp"
+ #include "tsan/tsanOopMap.hpp"
  
  ShenandoahSerialRoot::ShenandoahSerialRoot(ShenandoahSerialRoot::OopsDo oops_do, ShenandoahPhaseTimings::GCParPhases phase) :
    _oops_do(oops_do), _phase(phase) {
  }
  

@@ -98,13 +99,20 @@
  ShenandoahJFRWeakRoot::ShenandoahJFRWeakRoot() :
    ShenandoahWeakSerialRoot(&Jfr::weak_oops_do, ShenandoahPhaseTimings::JFRWeakRoots) {
  }
  #endif // INCLUDE_JFR
  
+ #if INCLUDE_TSAN
+ ShenandoahTSANWeakRoot::ShenandoahTSANWeakRoot() :
+   ShenandoahWeakSerialRoot(&TsanOopMap::weak_oops_do, ShenandoahPhaseTimings::TSANWeakRoots) {
+ }
+ #endif // INCLUDE_TSAN
+ 
  void ShenandoahSerialWeakRoots::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* keep_alive, uint worker_id) {
    JVMTI_ONLY(_jvmti_weak_roots.weak_oops_do(is_alive, keep_alive, worker_id);)
    JFR_ONLY(_jfr_weak_roots.weak_oops_do(is_alive, keep_alive, worker_id);)
+   TSAN_ONLY(_tsan_weak_roots.weak_oops_do(is_alive, keep_alive, worker_id);)
  }
  
  void ShenandoahSerialWeakRoots::weak_oops_do(OopClosure* cl, uint worker_id) {
    AlwaysTrueClosure always_true;
    weak_oops_do(&always_true, cl, worker_id);
< prev index next >