Do not visit null object from transaction logs.
In debug build, it could cause check failure in MarkSweep::MarkObjectNonNull.
Change-Id: I840d1682e8150d7b04e83c7c25c340008dd82e70
diff --git a/runtime/transaction.cc b/runtime/transaction.cc
index 019a322..fcda6c9 100644
--- a/runtime/transaction.cc
+++ b/runtime/transaction.cc
@@ -157,7 +157,6 @@
}
void Transaction::VisitRoots(RootCallback* callback, void* arg) {
- LOG(INFO) << "Transaction::VisitRoots";
MutexLock mu(Thread::Current(), log_lock_);
VisitObjectLogs(callback, arg);
VisitArrayLogs(callback, arg);
@@ -310,8 +309,10 @@
if (field_value.kind == ObjectLog::kReference) {
mirror::Object* obj =
reinterpret_cast<mirror::Object*>(static_cast<uintptr_t>(field_value.value));
- callback(&obj, arg, 0, kRootUnknown);
- field_value.value = reinterpret_cast<uintptr_t>(obj);
+ if (obj != nullptr) {
+ callback(&obj, arg, 0, kRootUnknown);
+ field_value.value = reinterpret_cast<uintptr_t>(obj);
+ }
}
}
}