]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
common: CephContext::_refresh_perf_values() checks for null _mempool_perf 62852/head
authorCasey Bodley <cbodley@redhat.com>
Wed, 9 Apr 2025 19:26:51 +0000 (15:26 -0400)
committerCasey Bodley <cbodley@redhat.com>
Wed, 16 Apr 2025 19:50:35 +0000 (15:50 -0400)
test_perf_counters_cache.cc initializes the CephContext with flag
CINIT_FLAG_NO_CCT_PERF_COUNTERS which leaves both _cct_perf and
_mempool_perf as nullptrs

the CephContextServiceThread calls _refresh_perf_values() regularly,
which guards _cct_perf->set() calls with a nullptr check, but the
_mempool_perf->set() calls were unguarded

this led to occasional unittest_perf_counters_cache segfaults in make
check

Fixes: https://tracker.ceph.com/issues/64895
Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit 76b3f0118cad36aa522802b181b03cdc0cdd3942)

src/common/ceph_context.cc

index d26f24511d22e22062f224beb9fb133c486ca3de..11266161dfb0a9ab230e0c700fe9ea4393425d73 100644 (file)
@@ -992,11 +992,13 @@ void CephContext::_refresh_perf_values()
     _cct_perf->set(l_cct_total_workers, _heartbeat_map->get_total_workers());
     _cct_perf->set(l_cct_unhealthy_workers, _heartbeat_map->get_unhealthy_workers());
   }
-  unsigned l = l_mempool_first + 1;
-  for (unsigned i = 0; i < mempool::num_pools; ++i) {
-    mempool::pool_t& p = mempool::get_pool(mempool::pool_index_t(i));
-    _mempool_perf->set(l++, p.allocated_bytes());
-    _mempool_perf->set(l++, p.allocated_items());
+  if (_mempool_perf) {
+    unsigned l = l_mempool_first + 1;
+    for (unsigned i = 0; i < mempool::num_pools; ++i) {
+      mempool::pool_t& p = mempool::get_pool(mempool::pool_index_t(i));
+      _mempool_perf->set(l++, p.allocated_bytes());
+      _mempool_perf->set(l++, p.allocated_items());
+    }
   }
 }