From 08516775de769867fd90da87c854597c9aa4f0a6 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Sat, 6 Aug 2022 23:47:35 +0100 Subject: [PATCH] [Minor] Try to fix stats for the virtual symbols --- src/libmime/scan_result.c | 6 ++++-- src/libserver/rspamd_symcache.h | 3 ++- src/libserver/symcache/symcache_c.cxx | 5 +++-- src/libserver/symcache/symcache_item.hxx | 11 ++++++++++- 4 files changed, 19 insertions(+), 6 deletions(-) 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); + } + } + } } /** -- 2.39.5