]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
stats: fix usage of new atomic in code (variable stats_vals)
authorJan Hák <jan.hak@nic.cz>
Tue, 26 Nov 2024 11:56:51 +0000 (12:56 +0100)
committerDaniel Salzman <daniel.salzman@nic.cz>
Wed, 11 Dec 2024 16:36:20 +0000 (17:36 +0100)
src/knot/nameserver/query_module.c

index 0708b1704ef9a03312bb65149fea2e1094a2d9cf..8b7d7958ff946530741f04ae3b8bf5b3f5e1d4d0 100644 (file)
@@ -284,6 +284,10 @@ int knotd_mod_stats_add(knotd_mod_t *mod, const char *ctr_name, uint32_t idx_cou
                                knotd_mod_stats_free(mod);
                                return KNOT_ENOMEM;
                        }
+
+                       for (unsigned j = 0; j < idx_count; j++) {
+                               ATOMIC_INIT(mod->stats_vals[i][j], 0);
+                       }
                }
        } else {
                for (uint32_t i = 0; i < mod->stats_count; i++) {
@@ -311,9 +315,9 @@ int knotd_mod_stats_add(knotd_mod_t *mod, const char *ctr_name, uint32_t idx_cou
                                return KNOT_ENOMEM;
                        }
                        mod->stats_vals[i] = new_vals;
-                       new_vals += offset;
-                       for (uint32_t j = 0; j < idx_count; j++) {
-                               *new_vals++ = 0;
+
+                       for (unsigned j = 0; j < idx_count; j++) {
+                               ATOMIC_INIT(mod->stats_vals[i][offset + j], 0);
                        }
                }
        }
@@ -338,6 +342,9 @@ void knotd_mod_stats_free(knotd_mod_t *mod)
        if (mod->stats_vals != NULL) {
                unsigned threads = knotd_mod_threads(mod);
                for (unsigned i = 0; i < threads; i++) {
+                       for (unsigned j = 0; j < mod->stats_info->count; j++) {
+                               ATOMIC_DEINIT(mod->stats_vals[i][j]);
+                       }
                        free(mod->stats_vals[i]);
                }
        }