rspamd_get_ticks(FALSE) returns CLOCK_MONOTONIC (seconds since boot),
while rspamd_util.get_time() in Lua returns ev_time() (wall-clock unix
epoch). Using mismatched clocks made expire_ts comparisons nonsensical.
Switch to ev_now(ctx->event_loop) which matches the ev_time() epoch used
by Lua callers of block_fuzzy_client.
if (val != RADIX_NO_VALUE) {
struct rspamd_fuzzy_dynamic_ban *ban = (struct rspamd_fuzzy_dynamic_ban *) val;
- double now = rspamd_get_ticks(FALSE);
+ /* Use ev_now() — same wall-clock epoch as rspamd_util.get_time() in Lua */
+ double now = ev_now(ctx->event_loop);
if (ban->expire_ts == 0.0 || ban->expire_ts > now) {
rspamd_fuzzy_maybe_call_blacklisted(ctx, addr, "dynamic_blocked");