< prev index next >

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

Print this page
@@ -248,11 +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");
+       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 >