Browse Source

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

tags/3.3
Vsevolod Stakhov 1 year ago
parent
commit
be01ab4064
No account linked to committer's email address
2 changed files with 22 additions and 10 deletions
  1. 3
    2
      src/libserver/symcache/symcache_c.cxx
  2. 19
    8
      src/libserver/symcache/symcache_item.hxx

+ 3
- 2
src/libserver/symcache/symcache_c.cxx View 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);
}
}


+ 19
- 8
src/libserver/symcache/symcache_item.hxx View 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);
}
}


Loading…
Cancel
Save