diff options
Diffstat (limited to 'runtime/intern_table.cc')
-rw-r--r-- | runtime/intern_table.cc | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/runtime/intern_table.cc b/runtime/intern_table.cc index 89c15f8..472c92e 100644 --- a/runtime/intern_table.cc +++ b/runtime/intern_table.cc @@ -45,15 +45,16 @@ void InternTable::VisitRoots(RootVisitor* visitor, void* arg, bool only_dirty, bool clean_dirty) { MutexLock mu(Thread::Current(), intern_table_lock_); if (!only_dirty || is_dirty_) { - for (const auto& strong_intern : strong_interns_) { - visitor(strong_intern.second, arg); + for (auto& strong_intern : strong_interns_) { + strong_intern.second = reinterpret_cast<mirror::String*>(visitor(strong_intern.second, arg)); + DCHECK(strong_intern.second != nullptr); } + if (clean_dirty) { is_dirty_ = false; } } - // Note: we deliberately don't visit the weak_interns_ table and the immutable - // image roots. + // Note: we deliberately don't visit the weak_interns_ table and the immutable image roots. } mirror::String* InternTable::Lookup(Table& table, mirror::String* s, |