src/hotspot/share/gc/shared/referenceProcessor.cpp
changeset 52070 e4d72440d60e
parent 51332 c25572739e7c
child 52925 9c18c9d839d3
equal deleted inserted replaced
52069:3ecaae33241a 52070:e4d72440d60e
   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         }