]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] One more effort to select a proper item to change
authorVsevolod Stakhov <vsevolod@rspamd.com>
Sun, 7 Aug 2022 19:30:14 +0000 (20:30 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Sun, 7 Aug 2022 19:30:14 +0000 (20:30 +0100)
src/libserver/symcache/symcache_c.cxx
src/libserver/symcache/symcache_item.hxx

index 83d6b98422e38539f137885a9d089bf4d81449f3..71e0057ee4585786a0e14463593e6076b4d0dba0 100644 (file)
@@ -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);
        }
 }
 
index 8387cf5231407a415a8e742a6f3de821a56c9425..034a26e2c73a794aac0bd13c595a70f964e0c70a 100644 (file)
@@ -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);
                }
        }