diff options
author | Mathieu Chartier <mathieuc@google.com> | 2013-09-12 17:33:56 -0700 |
---|---|---|
committer | Mathieu Chartier <mathieuc@google.com> | 2013-09-13 10:30:24 -0700 |
commit | 423d2a3dcbb260b020efb5da59f784c9f02accbf (patch) | |
tree | 79ed739e6072f8308c1cd880f9420a1c63539c95 /runtime/reference_table.cc | |
parent | b048dd2b662c19644361f4396a1e8d6213445ee8 (diff) | |
download | art-423d2a3dcbb260b020efb5da59f784c9f02accbf.tar.gz art-423d2a3dcbb260b020efb5da59f784c9f02accbf.tar.bz2 art-423d2a3dcbb260b020efb5da59f784c9f02accbf.zip |
Add support for changing roots through the root visitor callback.
Needed for copying collectors.
Change-Id: Icc4a342a57e0cfb79587edb02ef8c85e08808877
Diffstat (limited to 'runtime/reference_table.cc')
-rw-r--r-- | runtime/reference_table.cc | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/runtime/reference_table.cc b/runtime/reference_table.cc index 8e23cbb153..e95fdb9226 100644 --- a/runtime/reference_table.cc +++ b/runtime/reference_table.cc @@ -38,16 +38,16 @@ ReferenceTable::ReferenceTable(const char* name, size_t initial_size, size_t max ReferenceTable::~ReferenceTable() { } -void ReferenceTable::Add(const mirror::Object* obj) { +void ReferenceTable::Add(mirror::Object* obj) { DCHECK(obj != NULL); - if (entries_.size() == max_size_) { + if (entries_.size() >= max_size_) { LOG(FATAL) << "ReferenceTable '" << name_ << "' " << "overflowed (" << max_size_ << " entries)"; } entries_.push_back(obj); } -void ReferenceTable::Remove(const mirror::Object* obj) { +void ReferenceTable::Remove(mirror::Object* obj) { // We iterate backwards on the assumption that references are LIFO. for (int i = entries_.size() - 1; i >= 0; --i) { if (entries_[i] == obj) { @@ -232,8 +232,8 @@ void ReferenceTable::Dump(std::ostream& os, const Table& entries) { } void ReferenceTable::VisitRoots(RootVisitor* visitor, void* arg) { - for (const auto& ref : entries_) { - visitor(ref, arg); + for (auto& ref : entries_) { + ref = visitor(const_cast<mirror::Object*>(ref), arg); } } |