]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
stats: Use duplicated metric settings in stats_metrics_add_dynamic().
authorsergey.kitov <sergey.kitov@open-xchange.com>
Tue, 28 Sep 2021 12:35:21 +0000 (15:35 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 29 Sep 2021 05:38:10 +0000 (08:38 +0300)
src/stats/stats-metrics.c

index ba7f91980f1369f06e7a2da6ed2becb179f3154d..5ca3038af1334f24fffc23221e7dc3d0352a0104 100644 (file)
@@ -157,13 +157,31 @@ static void stats_metrics_add_set(struct stats_metrics *metrics,
        }
 }
 
+static struct stats_metric_settings *
+stats_metric_settings_dup(pool_t pool, const struct stats_metric_settings *src)
+{
+       struct stats_metric_settings *set = p_new(pool, struct stats_metric_settings, 1);
+
+       set->metric_name = p_strdup(pool, src->metric_name);
+       set->description = p_strdup(pool, src->description);
+       set->fields = p_strdup(pool, src->fields);
+       set->group_by = p_strdup(pool, src->group_by);
+       set->filter = p_strdup(pool, src->filter);
+       set->exporter = p_strdup(pool, src->exporter);
+       set->exporter_include = p_strdup(pool, src->exporter_include);
+
+       return set;
+}
+
 bool stats_metrics_add_dynamic(struct stats_metrics *metrics,
                               struct stats_metric_settings *set,
                               const char **error_r)
 {
-        if (!stats_metric_setting_parser_info.check_func(set, metrics->pool, error_r))
+       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))
                return FALSE;
-       stats_metrics_add_set(metrics, set);
+       stats_metrics_add_set(metrics, _set);
        return TRUE;
 }