diff options
author | Mathieu Chartier <mathieuc@google.com> | 2014-01-17 21:11:41 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-01-17 21:11:41 +0000 |
commit | ed31badc6de501320f49bec679dcdf9214ac07cc (patch) | |
tree | 5ec0107863e34bec167451a03f0be6ee8e3fc694 | |
parent | 1776f50b5b99782278d7f3d354fa956d9066c903 (diff) | |
parent | 2ef33c3dce17dabd9342ccf15cca5700487f2045 (diff) | |
download | art-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.h | 4 |
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); } } |