commit 0851677: [Minor] Try to fix stats for the virtual symbols

Vsevolod Stakhov vsevolod at rspamd.com
Sat Aug 6 22:49:03 UTC 2022


Author: Vsevolod Stakhov
Date: 2022-08-06 23:47:35 +0100
URL: https://github.com/rspamd/rspamd/commit/08516775de769867fd90da87c854597c9aa4f0a6 (HEAD -> master)

[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);
+				}
+			}
+		}
 	}
 
 	/**


More information about the Commits mailing list