Protect metric release in dimension delete callback (#17020)
Protect metric release
Stelios Fragkakis committed
Feb 16, 2024 at 23:28 UTC
dea9d1feb2a5fcc7967504895bbe6abbf1b0f524
1 file changed
+7
-5
src/database/rrddim.c
+7
-5
@@ -206,11 +206,13 @@ static void rrddim_delete_callback(const DICTIONARY_ITEM *item __maybe_unused, v
206
}
207
208
for(size_t tier = 0; tier < storage_tiers ;tier++) {
209
- if(!rd->tiers[tier].smh) continue;
210
-
211
- STORAGE_ENGINE* eng = host->db[tier].eng;
212
- eng->api.metric_release(rd->tiers[tier].smh);
213
- rd->tiers[tier].smh = NULL;
209
+ spinlock_lock(&rd->tiers[tier].spinlock);
210
+ if(rd->tiers[tier].smh) {
211
+ STORAGE_ENGINE *eng = host->db[tier].eng;
212
+ eng->api.metric_release(rd->tiers[tier].smh);
213
+ rd->tiers[tier].smh = NULL;
214
+ }
215
+ spinlock_unlock(&rd->tiers[tier].spinlock);
216
}
217
218
if(rd->db.data) {