6810698: G1: two small bugs in the sparse remembered sets
The _expanded flag of the sparse RSets is not reset and this can leave a RSet in an inconsistent state if it is expanded more than once. Also, we should be iterating over the _cur, instead of the _next, sparse table Reviewed-by: apetrusenko, iveresov
This commit is contained in:
parent
416d70bf91
commit
e7d899910b
@ -504,6 +504,7 @@ void SparsePRT::cleanup() {
|
|||||||
// Make sure that the current and next tables agree. (Another mechanism
|
// Make sure that the current and next tables agree. (Another mechanism
|
||||||
// takes care of deleting now-unused tables.)
|
// takes care of deleting now-unused tables.)
|
||||||
_cur = _next;
|
_cur = _next;
|
||||||
|
set_expanded(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SparsePRT::expand() {
|
void SparsePRT::expand() {
|
||||||
|
@ -274,7 +274,7 @@ public:
|
|||||||
|
|
||||||
// Clean up all tables on the expanded list. Called single threaded.
|
// Clean up all tables on the expanded list. Called single threaded.
|
||||||
static void cleanup_all();
|
static void cleanup_all();
|
||||||
RSHashTable* next() const { return _next; }
|
RSHashTable* cur() const { return _cur; }
|
||||||
|
|
||||||
|
|
||||||
void init_iterator(SparsePRTIter* sprt_iter);
|
void init_iterator(SparsePRTIter* sprt_iter);
|
||||||
@ -300,7 +300,7 @@ public:
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
void init(const SparsePRT* sprt) {
|
void init(const SparsePRT* sprt) {
|
||||||
RSHashTableIter::init(sprt->next());
|
RSHashTableIter::init(sprt->cur());
|
||||||
}
|
}
|
||||||
bool has_next(size_t& card_index) {
|
bool has_next(size_t& card_index) {
|
||||||
return RSHashTableIter::has_next(card_index);
|
return RSHashTableIter::has_next(card_index);
|
||||||
|
Loading…
Reference in New Issue
Block a user