Fix root visiting in transaction.cc
Using a non reference auto makes a copy of the pair, this resulted in
the GC root never being updated if it moved.
Bug: 34981452
Test: untested
Change-Id: I3ea5d567e7ac016332c27058f9fdb77561c022c1
diff --git a/runtime/transaction.cc b/runtime/transaction.cc
index 2536968..f94bb65 100644
--- a/runtime/transaction.cc
+++ b/runtime/transaction.cc
@@ -262,7 +262,7 @@
std::list<ObjectPair> moving_roots;
// Visit roots.
- for (auto it : object_logs_) {
+ for (auto& it : object_logs_) {
it.second.VisitRoots(visitor);
mirror::Object* old_root = it.first;
mirror::Object* new_root = old_root;
@@ -289,7 +289,7 @@
typedef std::pair<mirror::Array*, mirror::Array*> ArrayPair;
std::list<ArrayPair> moving_roots;
- for (auto it : array_logs_) {
+ for (auto& it : array_logs_) {
mirror::Array* old_root = it.first;
CHECK(!old_root->IsObjectArray());
mirror::Array* new_root = old_root;
@@ -456,7 +456,7 @@
}
void Transaction::ObjectLog::VisitRoots(RootVisitor* visitor) {
- for (auto it : field_values_) {
+ for (auto& it : field_values_) {
FieldValue& field_value = it.second;
if (field_value.kind == ObjectLog::kReference) {
visitor->VisitRootIfNonNull(reinterpret_cast<mirror::Object**>(&field_value.value),