39 std::unique_lock<Mutex> lock(mutex_);
44 std::unique_lock<Mutex> lock(mutex_);
53 const std::unordered_set<const Traceable*>& ref_alive) {
55 std::unique_lock<Mutex> lock(mutex_);
56 pending_.insert(ref_alive.begin(), ref_alive.end());
60 std::unordered_set<const Traceable*> to_trace;
63 std::unique_lock<Mutex> lock(mutex_);
64 to_trace = std::move(pending_);
68 for (
auto it = to_trace.begin(); it != to_trace.end();) {
69 if (*it && alive_.count(*it) == 0) {
73 it = to_trace.erase(it);
87 std::unique_lock<Mutex> lock(mutex_);
void Trace(const Traceable *ptr)
void ForceAlive(const Traceable *ptr)
virtual bool IsRootedAlive() const
virtual bool IsShortLived() const
void TraceAll(const std::unordered_set< const Traceable *> &ref_alive)