From: Vsevolod Stakhov Date: Sat, 6 Jun 2015 21:10:13 +0000 (+0100) Subject: Improve linear processing slightly. X-Git-Tag: 1.0.0~570 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1fcc88a39c95c581485d4bbfda3789e6aa6ed004;p=thirdparty%2Frspamd.git Improve linear processing slightly. --- diff --git a/src/libserver/symbols_cache.c b/src/libserver/symbols_cache.c index 5fcb35782b..8b52726208 100644 --- a/src/libserver/symbols_cache.c +++ b/src/libserver/symbols_cache.c @@ -732,6 +732,8 @@ rspamd_symbols_cache_validate (struct symbols_cache *cache, struct cache_savepoint { guchar *processed_bits; guint processed_num; + guint pass; + gint offset; }; gboolean @@ -755,6 +757,8 @@ rspamd_symbols_cache_process_symbol (struct rspamd_task * task, /* Inverse to use ffs */ memset (checkpoint->processed_bits, 0xff, NBYTES (cache->used_items)); checkpoint->processed_num = 0; + checkpoint->pass = 0; + checkpoint->offset = 0; *save = checkpoint; } else { @@ -767,13 +771,17 @@ rspamd_symbols_cache_process_symbol (struct rspamd_task * task, } /* TODO: too slow approach */ - for (i = 0; i < (gint)cache->used_items; i ++) { + for (i = checkpoint->offset * NBBY; i < (gint)cache->used_items; i ++) { if (isset (checkpoint->processed_bits, i)) { idx = i; break; } } + if (idx >= (checkpoint->offset + 1) * NBBY) { + checkpoint->offset ++; + } + g_assert (idx >= 0 && idx < (gint)cache->items_by_order->len); item = g_ptr_array_index (cache->items_by_order, idx);