From: Vsevolod Stakhov Date: Tue, 31 Mar 2026 10:45:33 +0000 (+0100) Subject: [Fix] Use finished status in disable_all_symbols X-Git-Tag: 4.0.1~6^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=56a57733d3755f2b3fb27e6cbb092718141aaae5;p=thirdparty%2Frspamd.git [Fix] Use finished status in disable_all_symbols disable_all_symbols implements "disable all, then enable some" for symbols_enabled/groups_enabled. Using `disabled` status here caused cascade-disable of hard dependents: if an enabled symbol depended on a non-enabled one, the enabled symbol was wrongly cascade-disabled. Revert to `finished` for disable_all_symbols. Reserve `disabled` status for explicit symbol/group disable via settings rules (disable_symbol), where cascade-disable IS the intended behavior. --- diff --git a/src/libserver/symcache/symcache_runtime.cxx b/src/libserver/symcache/symcache_runtime.cxx index bc1ffc01c2..d1ee45eed0 100644 --- a/src/libserver/symcache/symcache_runtime.cxx +++ b/src/libserver/symcache/symcache_runtime.cxx @@ -199,7 +199,13 @@ auto symcache_runtime::disable_all_symbols(int skip_mask) -> void auto *dyn_item = &dynamic_items[i]; if (!(item->get_flags() & skip_mask)) { - dyn_item->status = cache_item_status::disabled; + /* + * Use `finished` not `disabled`: this implements the "disable all, + * then enable some" pattern from symbols_enabled/groups_enabled. + * Using `disabled` would cascade-disable hard dependents, which is + * wrong when an enabled symbol depends on a non-enabled one. + */ + dyn_item->status = cache_item_status::finished; } } }