< prev index next >

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

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


 375     RefProcEnqueueTask tsk(*this, _discovered_refs, _max_num_q);
 376     task_executor->execute(tsk);
 377   } else {
 378     // Serial code: call the parent class's implementation
 379     for (uint i = 0; i < _max_num_q * number_of_subclasses_of_ref(); i++) {
 380       enqueue_discovered_reflist(_discovered_refs[i]);
 381       _discovered_refs[i].set_head(NULL);
 382       _discovered_refs[i].set_length(0);
 383     }
 384   }
 385 }
 386 
 387 void DiscoveredListIterator::load_ptrs(DEBUG_ONLY(bool allow_null_referent)) {
 388   _discovered_addr = java_lang_ref_Reference::discovered_addr(_ref);
 389   oop discovered = java_lang_ref_Reference::discovered(_ref);
 390   assert(_discovered_addr && discovered->is_oop_or_null(),
 391          "Expected an oop or NULL for discovered field at " PTR_FORMAT, p2i(discovered));
 392   _next = discovered;
 393   _referent_addr = java_lang_ref_Reference::referent_addr(_ref);
 394   _referent = java_lang_ref_Reference::referent(_ref);
 395   assert(Universe::heap()->is_in_reserved_or_null(_referent),
 396          "Wrong oop found in java.lang.Reference object");
 397   assert(allow_null_referent ?
 398              _referent->is_oop_or_null()
 399            : _referent->is_oop(),
 400          "Expected an oop%s for referent field at " PTR_FORMAT,
 401          (allow_null_referent ? " or NULL" : ""),
 402          p2i(_referent));
 403 }
 404 
 405 void DiscoveredListIterator::remove() {
 406   assert(_ref->is_oop(), "Dropping a bad reference");
 407   oop_store_raw(_discovered_addr, NULL);
 408 
 409   // First _prev_next ref actually points into DiscoveredList (gross).
 410   oop new_next;
 411   if (_next == _ref) {
 412     // At the end of the list, we should make _prev point to itself.
 413     // If _ref is the first ref, then _prev_next will be in the DiscoveredList,
 414     // and _prev will be NULL.
 415     new_next = _prev;




 375     RefProcEnqueueTask tsk(*this, _discovered_refs, _max_num_q);
 376     task_executor->execute(tsk);
 377   } else {
 378     // Serial code: call the parent class's implementation
 379     for (uint i = 0; i < _max_num_q * number_of_subclasses_of_ref(); i++) {
 380       enqueue_discovered_reflist(_discovered_refs[i]);
 381       _discovered_refs[i].set_head(NULL);
 382       _discovered_refs[i].set_length(0);
 383     }
 384   }
 385 }
 386 
 387 void DiscoveredListIterator::load_ptrs(DEBUG_ONLY(bool allow_null_referent)) {
 388   _discovered_addr = java_lang_ref_Reference::discovered_addr(_ref);
 389   oop discovered = java_lang_ref_Reference::discovered(_ref);
 390   assert(_discovered_addr && discovered->is_oop_or_null(),
 391          "Expected an oop or NULL for discovered field at " PTR_FORMAT, p2i(discovered));
 392   _next = discovered;
 393   _referent_addr = java_lang_ref_Reference::referent_addr(_ref);
 394   _referent = java_lang_ref_Reference::referent(_ref);
 395   assert(GC::gc()->heap()->is_in_reserved_or_null(_referent),
 396          "Wrong oop found in java.lang.Reference object");
 397   assert(allow_null_referent ?
 398              _referent->is_oop_or_null()
 399            : _referent->is_oop(),
 400          "Expected an oop%s for referent field at " PTR_FORMAT,
 401          (allow_null_referent ? " or NULL" : ""),
 402          p2i(_referent));
 403 }
 404 
 405 void DiscoveredListIterator::remove() {
 406   assert(_ref->is_oop(), "Dropping a bad reference");
 407   oop_store_raw(_discovered_addr, NULL);
 408 
 409   // First _prev_next ref actually points into DiscoveredList (gross).
 410   oop new_next;
 411   if (_next == _ref) {
 412     // At the end of the list, we should make _prev point to itself.
 413     // If _ref is the first ref, then _prev_next will be in the DiscoveredList,
 414     // and _prev will be NULL.
 415     new_next = _prev;


< prev index next >