summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rspamd.com>2022-08-06 23:47:35 +0100
committerVsevolod Stakhov <vsevolod@rspamd.com>2022-08-06 23:47:35 +0100
commit08516775de769867fd90da87c854597c9aa4f0a6 (patch)
treeda2cac74e12e6d0ba31870bb52e94ba1b2552953
parent7d89519edd35bdc79fd295ef873ca607fe7700d9 (diff)
downloadrspamd-08516775de769867fd90da87c854597c9aa4f0a6.tar.gz
rspamd-08516775de769867fd90da87c854597c9aa4f0a6.zip
[Minor] Try to fix stats for the virtual symbols
-rw-r--r--src/libmime/scan_result.c6
-rw-r--r--src/libserver/rspamd_symcache.h3
-rw-r--r--src/libserver/symcache/symcache_c.cxx5
-rw-r--r--src/libserver/symcache/symcache_item.hxx11
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);
+ }
+ }
+ }
}
/**