< prev index next >

src/hotspot/share/jfr/leakprofiler/chains/edgeStore.cpp

Print this page
*** 248,11 ***
    assert(sample != nullptr, "invariant");
    if (_leak_context_edges != nullptr) {
      assert(SafepointSynchronize::is_at_safepoint(), "invariant");
      const int idx = leak_context_edge_idx(sample);
      if (idx > 0) {
!       assert(idx < _leak_context_edges->length(), "invariant");
        const StoredEdge* const edge =_leak_context_edges->at(idx);
        assert(edge != nullptr, "invariant");
        return edge;
      }
    }
--- 248,11 ---
    assert(sample != nullptr, "invariant");
    if (_leak_context_edges != nullptr) {
      assert(SafepointSynchronize::is_at_safepoint(), "invariant");
      const int idx = leak_context_edge_idx(sample);
      if (idx > 0) {
!       assert(idx < _leak_context_edges->length(), "invariant idx: %d >= length: %d", idx, _leak_context_edges->length());
        const StoredEdge* const edge =_leak_context_edges->at(idx);
        assert(edge != nullptr, "invariant");
        return edge;
      }
    }

*** 266,10 ***
--- 266,12 ---
  static void store_idx_precondition(oop sample_object, int idx) {
    assert(sample_object != nullptr, "invariant");
    assert(sample_object->mark().is_marked(), "invariant");
    assert(idx > 0, "invariant");
    assert(idx <= max_idx, "invariant");
+   const int upper_bits = sample_object->mark().value() >> markWord::lock_bits;
+   assert((upper_bits | idx) == idx, "idx codec error : (%d | %d) != %d", upper_bits, idx, idx);
  }
  #endif
  
  static void store_idx_in_markword(oop sample_object, int idx) {
    DEBUG_ONLY(store_idx_precondition(sample_object, idx);)
< prev index next >