< prev index next >

src/share/vm/gc/shared/referenceProcessor.cpp

Print this page
rev 11777 : [mq]: gcinterface.patch


 404                            pending_list_addr, _max_num_q);
 405     task_executor->execute(tsk);
 406   } else {
 407     // Serial code: call the parent class's implementation
 408     for (uint i = 0; i < _max_num_q * number_of_subclasses_of_ref(); i++) {
 409       enqueue_discovered_reflist(_discovered_refs[i], pending_list_addr);
 410       _discovered_refs[i].set_head(NULL);
 411       _discovered_refs[i].set_length(0);
 412     }
 413   }
 414 }
 415 
 416 void DiscoveredListIterator::load_ptrs(DEBUG_ONLY(bool allow_null_referent)) {
 417   _discovered_addr = java_lang_ref_Reference::discovered_addr(_ref);
 418   oop discovered = java_lang_ref_Reference::discovered(_ref);
 419   assert(_discovered_addr && discovered->is_oop_or_null(),
 420          "Expected an oop or NULL for discovered field at " PTR_FORMAT, p2i(discovered));
 421   _next = discovered;
 422   _referent_addr = java_lang_ref_Reference::referent_addr(_ref);
 423   _referent = java_lang_ref_Reference::referent(_ref);
 424   assert(Universe::heap()->is_in_reserved_or_null(_referent),
 425          "Wrong oop found in java.lang.Reference object");
 426   assert(allow_null_referent ?
 427              _referent->is_oop_or_null()
 428            : _referent->is_oop(),
 429          "Expected an oop%s for referent field at " PTR_FORMAT,
 430          (allow_null_referent ? " or NULL" : ""),
 431          p2i(_referent));
 432 }
 433 
 434 void DiscoveredListIterator::remove() {
 435   assert(_ref->is_oop(), "Dropping a bad reference");
 436   oop_store_raw(_discovered_addr, NULL);
 437 
 438   // First _prev_next ref actually points into DiscoveredList (gross).
 439   oop new_next;
 440   if (_next == _ref) {
 441     // At the end of the list, we should make _prev point to itself.
 442     // If _ref is the first ref, then _prev_next will be in the DiscoveredList,
 443     // and _prev will be NULL.
 444     new_next = _prev;




 404                            pending_list_addr, _max_num_q);
 405     task_executor->execute(tsk);
 406   } else {
 407     // Serial code: call the parent class's implementation
 408     for (uint i = 0; i < _max_num_q * number_of_subclasses_of_ref(); i++) {
 409       enqueue_discovered_reflist(_discovered_refs[i], pending_list_addr);
 410       _discovered_refs[i].set_head(NULL);
 411       _discovered_refs[i].set_length(0);
 412     }
 413   }
 414 }
 415 
 416 void DiscoveredListIterator::load_ptrs(DEBUG_ONLY(bool allow_null_referent)) {
 417   _discovered_addr = java_lang_ref_Reference::discovered_addr(_ref);
 418   oop discovered = java_lang_ref_Reference::discovered(_ref);
 419   assert(_discovered_addr && discovered->is_oop_or_null(),
 420          "Expected an oop or NULL for discovered field at " PTR_FORMAT, p2i(discovered));
 421   _next = discovered;
 422   _referent_addr = java_lang_ref_Reference::referent_addr(_ref);
 423   _referent = java_lang_ref_Reference::referent(_ref);
 424   assert(GC::gc()->heap()->is_in_reserved_or_null(_referent),
 425          "Wrong oop found in java.lang.Reference object");
 426   assert(allow_null_referent ?
 427              _referent->is_oop_or_null()
 428            : _referent->is_oop(),
 429          "Expected an oop%s for referent field at " PTR_FORMAT,
 430          (allow_null_referent ? " or NULL" : ""),
 431          p2i(_referent));
 432 }
 433 
 434 void DiscoveredListIterator::remove() {
 435   assert(_ref->is_oop(), "Dropping a bad reference");
 436   oop_store_raw(_discovered_addr, NULL);
 437 
 438   // First _prev_next ref actually points into DiscoveredList (gross).
 439   oop new_next;
 440   if (_next == _ref) {
 441     // At the end of the list, we should make _prev point to itself.
 442     // If _ref is the first ref, then _prev_next will be in the DiscoveredList,
 443     // and _prev will be NULL.
 444     new_next = _prev;


< prev index next >