From: sergey.kitov Date: Wed, 29 Sep 2021 11:57:34 +0000 (+0300) Subject: stats: Check if metric already exists when adding dynamically. X-Git-Tag: 2.3.17~17 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1d8f9abfb936c6f85cb1a5d9e9d32693e4b081ce;p=thirdparty%2Fdovecot%2Fcore.git stats: Check if metric already exists when adding dynamically. --- diff --git a/src/stats/stats-metrics.c b/src/stats/stats-metrics.c index 5ca3038af1..e339d3705a 100644 --- a/src/stats/stats-metrics.c +++ b/src/stats/stats-metrics.c @@ -173,10 +173,26 @@ stats_metric_settings_dup(pool_t pool, const struct stats_metric_settings *src) return set; } +static struct metric * +stats_metrics_find(struct stats_metrics *metrics, const char *name) +{ + struct metric *m; + array_foreach_elem(&metrics->metrics, m) { + if (strcmp(m->name, name) == 0) + return m; + } + return NULL; +} + bool stats_metrics_add_dynamic(struct stats_metrics *metrics, struct stats_metric_settings *set, const char **error_r) { + if (stats_metrics_find(metrics, set->metric_name) != NULL) { + *error_r = "Metric already exists"; + return FALSE; + } + struct stats_metric_settings *_set = stats_metric_settings_dup(metrics->pool, set); if (!stats_metric_setting_parser_info.check_func(_set, metrics->pool, error_r)) @@ -188,11 +204,9 @@ bool stats_metrics_add_dynamic(struct stats_metrics *metrics, bool stats_metrics_remove_dynamic(struct stats_metrics *metrics, const char *name) { - struct metric *m; - array_foreach_elem(&metrics->metrics, m) { - if (strcmp(m->name, name) == 0) - return event_filter_remove_queries_with_context(metrics->filter, m); - } + struct metric *m = stats_metrics_find(metrics, name); + if (m != NULL) + return event_filter_remove_queries_with_context(metrics->filter, m); return FALSE; }