summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStelios Fragkakis <52996999+stelfrag@users.noreply.github.com>2024-02-16 23:28:55 +0200
committerGitHub <noreply@github.com>2024-02-16 23:28:55 +0200
commitdea9d1feb2a5fcc7967504895bbe6abbf1b0f524 (patch)
tree76f8f4ddc5add1c9236e2d4b47d99165295da912
parent43eab7b7da7f174696d8eefb6de1100a5121c535 (diff)
Protect metric release in dimension delete callback (#17020)
Protect metric release
-rw-r--r--src/database/rrddim.c12
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) {