summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathieu Chartier <mathieuc@google.com>2014-01-17 21:11:41 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-01-17 21:11:41 +0000
commited31badc6de501320f49bec679dcdf9214ac07cc (patch)
tree5ec0107863e34bec167451a03f0be6ee8e3fc694
parent1776f50b5b99782278d7f3d354fa956d9066c903 (diff)
parent2ef33c3dce17dabd9342ccf15cca5700487f2045 (diff)
downloadart-ed31badc6de501320f49bec679dcdf9214ac07cc.zip
art-ed31badc6de501320f49bec679dcdf9214ac07cc.tar.gz
art-ed31badc6de501320f49bec679dcdf9214ac07cc.tar.bz2
Merge "Fix bug in CardTable::ModifyCardsAtomic."
-rw-r--r--runtime/gc/accounting/card_table-inl.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/runtime/gc/accounting/card_table-inl.h b/runtime/gc/accounting/card_table-inl.h
index 7bd53df..f0c4d0d 100644
--- a/runtime/gc/accounting/card_table-inl.h
+++ b/runtime/gc/accounting/card_table-inl.h
@@ -121,7 +121,7 @@ template <typename Visitor, typename ModifiedVisitor>
inline void CardTable::ModifyCardsAtomic(byte* scan_begin, byte* scan_end, const Visitor& visitor,
const ModifiedVisitor& modified) {
byte* card_cur = CardFromAddr(scan_begin);
- byte* card_end = CardFromAddr(scan_end);
+ byte* card_end = CardFromAddr(AlignUp(scan_end, kCardSize));
CheckCardValid(card_cur);
CheckCardValid(card_end);
@@ -147,7 +147,7 @@ inline void CardTable::ModifyCardsAtomic(byte* scan_begin, byte* scan_end, const
new_value = visitor(expected);
} while (expected != new_value && UNLIKELY(!byte_cas(expected, new_value, card_end)));
if (expected != new_value) {
- modified(card_cur, expected, new_value);
+ modified(card_end, expected, new_value);
}
}