diff options
author | Stelios Fragkakis <52996999+stelfrag@users.noreply.github.com> | 2024-02-16 23:28:55 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-16 23:28:55 +0200 |
commit | dea9d1feb2a5fcc7967504895bbe6abbf1b0f524 (patch) | |
tree | 76f8f4ddc5add1c9236e2d4b47d99165295da912 | |
parent | 43eab7b7da7f174696d8eefb6de1100a5121c535 (diff) |
Protect metric release in dimension delete callback (#17020)
Protect metric release
-rw-r--r-- | src/database/rrddim.c | 12 |
1 files 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) { |