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),