< prev index next > src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.cpp
Print this page
#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) {
}
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 >