< prev index next >

src/hotspot/share/gc/g1/heapRegionSet.cpp

Print this page

        

*** 88,97 **** --- 88,103 ---- void FreeRegionList::set_unrealistically_long_length(uint len) { guarantee(_unrealistically_long_length == 0, "should only be set once"); _unrealistically_long_length = len; } + void FreeRegionList::abandon() { + check_mt_safety(); + clear(); + verify_optional(); + } + void FreeRegionList::remove_all() { check_mt_safety(); verify_optional(); HeapRegion* curr = _head;
*** 110,123 **** clear(); verify_optional(); } ! void FreeRegionList::add_ordered(FreeRegionList* from_list) { check_mt_safety(); from_list->check_mt_safety(); - verify_optional(); from_list->verify_optional(); if (from_list->is_empty()) { return; --- 116,128 ---- clear(); verify_optional(); } ! void FreeRegionList::add_list_common_start(FreeRegionList* from_list) { check_mt_safety(); from_list->check_mt_safety(); verify_optional(); from_list->verify_optional(); if (from_list->is_empty()) { return;
*** 136,145 **** --- 141,191 ---- // to NULL it first before setting it to the value. hr->set_containing_set(NULL); hr->set_containing_set(this); } #endif // ASSERT + } + + void FreeRegionList::add_list_common_end(FreeRegionList* from_list) { + _length += from_list->length(); + from_list->clear(); + + verify_optional(); + from_list->verify_optional(); + } + + void FreeRegionList::append_ordered(FreeRegionList* from_list) { + add_list_common_start(from_list); + + if (from_list->is_empty()) { + return; + } + + if (is_empty()) { + // Make from_list the current list. + assert_free_region_list(length() == 0 && _tail == NULL, "invariant"); + _head = from_list->_head; + _tail = from_list->_tail; + } else { + // Add the from_list to the end of the current list. + assert(_tail->hrm_index() < from_list->_head->hrm_index(), "Should be sorted %u < %u", + _tail->hrm_index(), from_list->_head->hrm_index()); + + _tail->set_next(from_list->_head); + from_list->_head->set_prev(_tail); + _tail = from_list->_tail; + } + + add_list_common_end(from_list); + } + + void FreeRegionList::add_ordered(FreeRegionList* from_list) { + add_list_common_start(from_list); + + if (from_list->is_empty()) { + return; + } if (is_empty()) { assert_free_region_list(length() == 0 && _tail == NULL, "invariant"); _head = from_list->_head; _tail = from_list->_tail;
*** 176,190 **** if (_tail->hrm_index() < from_list->_tail->hrm_index()) { _tail = from_list->_tail; } } ! _length += from_list->length(); ! from_list->clear(); ! ! verify_optional(); ! from_list->verify_optional(); } void FreeRegionList::remove_starting_at(HeapRegion* first, uint num_regions) { check_mt_safety(); assert_free_region_list(num_regions >= 1, "pre-condition"); --- 222,232 ---- if (_tail->hrm_index() < from_list->_tail->hrm_index()) { _tail = from_list->_tail; } } ! add_list_common_end(from_list); } void FreeRegionList::remove_starting_at(HeapRegion* first, uint num_regions) { check_mt_safety(); assert_free_region_list(num_regions >= 1, "pre-condition");
< prev index next >