commit be01ab4: [Minor] One more effort to select a proper item to change

Vsevolod Stakhov vsevolod at rspamd.com
Sun Aug 7 19:35:03 UTC 2022


Author: Vsevolod Stakhov
Date: 2022-08-07 20:30:14 +0100
URL: https://github.com/rspamd/rspamd/commit/be01ab406474d4251cb22b11f218d26264db9750 (HEAD -> master)

[Minor] One more effort to select a proper item to change

---
 src/libserver/symcache/symcache_c.cxx    |  5 +++--
 src/libserver/symcache/symcache_item.hxx | 27 +++++++++++++++++++--------
 2 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/src/libserver/symcache/symcache_c.cxx b/src/libserver/symcache/symcache_c.cxx
index 83d6b9842..71e0057ee 100644
--- a/src/libserver/symcache/symcache_c.cxx
+++ b/src/libserver/symcache/symcache_c.cxx
@@ -214,13 +214,14 @@ 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);
+	auto *real_cache = C_API_SYMCACHE(cache);
 
 	if (real_item) {
-		real_item->inc_frequency(sym_name);
+		real_item->inc_frequency(sym_name, *real_cache);
 	}
 }
 
diff --git a/src/libserver/symcache/symcache_item.hxx b/src/libserver/symcache/symcache_item.hxx
index 8387cf523..034a26e2c 100644
--- a/src/libserver/symcache/symcache_item.hxx
+++ b/src/libserver/symcache/symcache_item.hxx
@@ -343,16 +343,27 @@ public:
 	/**
 	 * Increase frequency for a symbol
 	 */
-	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);
+	auto inc_frequency(const char *sym_name, symcache &cache) -> void {
+		if (sym_name && symbol != sym_name) {
+			if (is_filter()) {
+				/* 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);
+					}
 				}
 			}
+			else {
+				/* Name not equal to symbol name, so we need to find the proper name */
+				auto *another_item = cache.get_item_by_name_mut(sym_name, false);
+				if (another_item != nullptr) {
+					another_item->inc_frequency(sym_name, cache);
+				}
+			}
+		}
+		else {
+			/* Symbol and sym name are the same */
+			g_atomic_int_inc(&st->hits);
 		}
 	}
 


More information about the Commits mailing list