< prev index next >

src/hotspot/share/gc/parallel/psPromotionManager.cpp

Print this page
@@ -41,12 +41,15 @@
  #include "memory/memRegion.hpp"
  #include "memory/padded.inline.hpp"
  #include "memory/resourceArea.hpp"
  #include "oops/access.inline.hpp"
  #include "oops/compressedOops.inline.hpp"
+ #include "oops/flatArrayKlass.inline.hpp"
+ #include "oops/oopCast.inline.hpp"
  #include "oops/oopsHierarchy.hpp"
  #include "utilities/checkedCast.hpp"
+ #include "utilities/debug.hpp"
  
  PaddedEnd<PSPromotionManager>* PSPromotionManager::_manager_array = nullptr;
  PSPromotionManager::PSScannerTasksQueueSet* PSPromotionManager::_stack_array_depth = nullptr;
  PreservedMarksSet*             PSPromotionManager::_preserved_marks_set = nullptr;
  PSOldGen*                      PSPromotionManager::_old_gen = nullptr;

@@ -256,20 +259,23 @@
                                    checked_cast<int>(end));
  }
  
  void PSPromotionManager::process_array_chunk(PartialArrayState* state, bool stolen) {
    // Access before release by claim().
-   objArrayOop to_array = objArrayOop(state->destination());
+   objArrayOop to_array = oop_cast<objArrayOop>(state->destination());
+   precond(to_array->is_array_with_oops());
+ 
    PartialArraySplitter::Claim claim =
      _partial_array_splitter.claim(state, &_claimed_stack_depth, stolen);
+ 
    process_array_chunk(to_array, claim._start, claim._end);
  }
  
  void PSPromotionManager::push_objArray(oop old_obj, oop new_obj) {
    assert(old_obj->is_forwarded(), "precondition");
    assert(old_obj->forwardee() == new_obj, "precondition");
-   assert(new_obj->is_objArray(), "precondition");
+   precond(new_obj->is_array_with_oops());
  
    objArrayOop to_array = objArrayOop(new_obj);
    size_t array_length = to_array->length();
    size_t initial_chunk_size =
      // The source array is unused when processing states.
< prev index next >