From: Vsevolod Stakhov Date: Sat, 6 Aug 2022 22:47:35 +0000 (+0100) Subject: [Minor] Try to fix stats for the virtual symbols X-Git-Tag: 3.3~92 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=08516775de769867fd90da87c854597c9aa4f0a6;p=rspamd.git [Minor] Try to fix stats for the virtual symbols --- diff --git a/src/libmime/scan_result.c b/src/libmime/scan_result.c index 0b9844b08..33cac5f70 100644 --- a/src/libmime/scan_result.c +++ b/src/libmime/scan_result.c @@ -586,7 +586,8 @@ rspamd_task_insert_result_full (struct rspamd_task *task, /* Process cache item */ if (symbol_result && task->cfg->cache && symbol_result->sym && symbol_result->nshots == 1) { rspamd_symcache_inc_frequency (task->cfg->cache, - symbol_result->sym->cache_item); + symbol_result->sym->cache_item, + symbol_result->sym->name); } } else if (new_symbol) { @@ -610,7 +611,8 @@ rspamd_task_insert_result_full (struct rspamd_task *task, /* Process cache item */ if (symbol_result && task->cfg->cache && symbol_result->sym && symbol_result->nshots == 1) { rspamd_symcache_inc_frequency (task->cfg->cache, - symbol_result->sym->cache_item); + symbol_result->sym->cache_item, + symbol_result->sym->name); } } } diff --git a/src/libserver/rspamd_symcache.h b/src/libserver/rspamd_symcache.h index 0510cb1dc..a72581432 100644 --- a/src/libserver/rspamd_symcache.h +++ b/src/libserver/rspamd_symcache.h @@ -231,7 +231,8 @@ void* rspamd_symcache_start_refresh (struct rspamd_symcache *cache, * @param symbol */ void rspamd_symcache_inc_frequency (struct rspamd_symcache *_cache, - struct rspamd_symcache_item *item); + struct rspamd_symcache_item *item, + const gchar *sym_name); /** * Add delayed dependency that is resolved on cache post-load routine diff --git a/src/libserver/symcache/symcache_c.cxx b/src/libserver/symcache/symcache_c.cxx index d4ae88e67..76cac67b6 100644 --- a/src/libserver/symcache/symcache_c.cxx +++ b/src/libserver/symcache/symcache_c.cxx @@ -214,12 +214,13 @@ rspamd_symcache_start_refresh(struct rspamd_symcache *cache, } void -rspamd_symcache_inc_frequency(struct rspamd_symcache *_cache, struct rspamd_symcache_item *item) +rspamd_symcache_inc_frequency(struct rspamd_symcache *_cache, struct rspamd_symcache_item *item, + const char *sym_name) { auto *real_item = C_API_SYMCACHE_ITEM(item); if (real_item) { - real_item->inc_frequency(); + real_item->inc_frequency(sym_name); } } diff --git a/src/libserver/symcache/symcache_item.hxx b/src/libserver/symcache/symcache_item.hxx index 94e3dc57d..8387cf523 100644 --- a/src/libserver/symcache/symcache_item.hxx +++ b/src/libserver/symcache/symcache_item.hxx @@ -343,8 +343,17 @@ public: /** * Increase frequency for a symbol */ - auto inc_frequency() -> void { + auto inc_frequency(const char *sym_name) -> void { g_atomic_int_inc(&st->hits); + + if (sym_name && symbol != sym_name && !is_virtual()) { + /* Likely a callback symbol with some virtual symbol that needs to be adjusted */ + for (const auto &cld : get_children().value().get()) { + if (cld->get_name() == sym_name) { + cld->inc_frequency(sym_name); + } + } + } } /**