From dea9d1feb2a5fcc7967504895bbe6abbf1b0f524 Mon Sep 17 00:00:00 2001 From: Stelios Fragkakis <52996999+stelfrag@users.noreply.github.com> Date: Fri, 16 Feb 2024 23:28:55 +0200 Subject: Protect metric release in dimension delete callback (#17020) Protect metric release --- src/database/rrddim.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/database/rrddim.c b/src/database/rrddim.c index 2f1cf28cab..311c26535f 100644 --- a/src/database/rrddim.c +++ b/src/database/rrddim.c @@ -206,11 +206,13 @@ static void rrddim_delete_callback(const DICTIONARY_ITEM *item __maybe_unused, v } for(size_t tier = 0; tier < storage_tiers ;tier++) { - if(!rd->tiers[tier].smh) continue; - - STORAGE_ENGINE* eng = host->db[tier].eng; - eng->api.metric_release(rd->tiers[tier].smh); - rd->tiers[tier].smh = NULL; + spinlock_lock(&rd->tiers[tier].spinlock); + if(rd->tiers[tier].smh) { + STORAGE_ENGINE *eng = host->db[tier].eng; + eng->api.metric_release(rd->tiers[tier].smh); + rd->tiers[tier].smh = NULL; + } + spinlock_unlock(&rd->tiers[tier].spinlock); } if(rd->db.data) { -- cgit v1.2.3