equal
deleted
inserted
replaced
282 assert(oopDesc::is_oop(_current_discovered), "Dropping a bad reference"); |
282 assert(oopDesc::is_oop(_current_discovered), "Dropping a bad reference"); |
283 RawAccess<>::oop_store(_current_discovered_addr, oop(NULL)); |
283 RawAccess<>::oop_store(_current_discovered_addr, oop(NULL)); |
284 |
284 |
285 // First _prev_next ref actually points into DiscoveredList (gross). |
285 // First _prev_next ref actually points into DiscoveredList (gross). |
286 oop new_next; |
286 oop new_next; |
287 if (_next_discovered == _current_discovered) { |
287 if (oopDesc::equals_raw(_next_discovered, _current_discovered)) { |
288 // At the end of the list, we should make _prev point to itself. |
288 // At the end of the list, we should make _prev point to itself. |
289 // If _ref is the first ref, then _prev_next will be in the DiscoveredList, |
289 // If _ref is the first ref, then _prev_next will be in the DiscoveredList, |
290 // and _prev will be NULL. |
290 // and _prev will be NULL. |
291 new_next = _prev_discovered; |
291 new_next = _prev_discovered; |
292 } else { |
292 } else { |
472 |
472 |
473 void |
473 void |
474 ReferenceProcessor::clear_discovered_references(DiscoveredList& refs_list) { |
474 ReferenceProcessor::clear_discovered_references(DiscoveredList& refs_list) { |
475 oop obj = NULL; |
475 oop obj = NULL; |
476 oop next = refs_list.head(); |
476 oop next = refs_list.head(); |
477 while (next != obj) { |
477 while (!oopDesc::equals_raw(next, obj)) { |
478 obj = next; |
478 obj = next; |
479 next = java_lang_ref_Reference::discovered(obj); |
479 next = java_lang_ref_Reference::discovered(obj); |
480 java_lang_ref_Reference::set_discovered_raw(obj, NULL); |
480 java_lang_ref_Reference::set_discovered_raw(obj, NULL); |
481 } |
481 } |
482 refs_list.clear(); |
482 refs_list.clear(); |
744 } |
744 } |
745 ref_lists[to_idx].set_head(move_head); |
745 ref_lists[to_idx].set_head(move_head); |
746 ref_lists[to_idx].inc_length(refs_to_move); |
746 ref_lists[to_idx].inc_length(refs_to_move); |
747 |
747 |
748 // Remove the chain from the from list. |
748 // Remove the chain from the from list. |
749 if (move_tail == new_head) { |
749 if (oopDesc::equals_raw(move_tail, new_head)) { |
750 // We found the end of the from list. |
750 // We found the end of the from list. |
751 ref_lists[from_idx].set_head(NULL); |
751 ref_lists[from_idx].set_head(NULL); |
752 } else { |
752 } else { |
753 ref_lists[from_idx].set_head(new_head); |
753 ref_lists[from_idx].set_head(new_head); |
754 } |
754 } |