diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-10-11 16:43:34 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-10-11 16:43:34 +0100 |
commit | 319f53a4b2c812ebd827d5e11c046423bc9feced (patch) | |
tree | a035217e6cc69ac133c53bdf84c85cec07426274 /src/libstat | |
parent | 196fc45d6b71c39453e1906920368ad9e0bb73e0 (diff) | |
download | rspamd-319f53a4b2c812ebd827d5e11c046423bc9feced.tar.gz rspamd-319f53a4b2c812ebd827d5e11c046423bc9feced.zip |
[CritFix] Fix processing of learned tokens count for redis backend
Diffstat (limited to 'src/libstat')
-rw-r--r-- | src/libstat/backends/redis_backend.c | 4 | ||||
-rw-r--r-- | src/libstat/stat_process.c | 39 |
2 files changed, 30 insertions, 13 deletions
diff --git a/src/libstat/backends/redis_backend.c b/src/libstat/backends/redis_backend.c index 4ff9b08b1..72b3a3491 100644 --- a/src/libstat/backends/redis_backend.c +++ b/src/libstat/backends/redis_backend.c @@ -749,7 +749,7 @@ rspamd_redis_connected (redisAsyncContext *c, gpointer r, gpointer priv) if (c->err == 0) { if (r != NULL) { - if (G_LIKELY (reply->type == REDIS_REPLY_INTEGER)) { + if (G_UNLIKELY (reply->type == REDIS_REPLY_INTEGER)) { val = reply->integer; } else if (reply->type == REDIS_REPLY_STRING) { @@ -807,7 +807,7 @@ rspamd_redis_processed (redisAsyncContext *c, gpointer r, gpointer priv) tok = g_ptr_array_index (task->tokens, i); elt = reply->element[i]; - if (G_LIKELY (elt->type == REDIS_REPLY_INTEGER)) { + if (G_UNLIKELY (elt->type == REDIS_REPLY_INTEGER)) { tok->values[rt->id] = elt->integer; found ++; } diff --git a/src/libstat/stat_process.c b/src/libstat/stat_process.c index ea0fcd601..ed24499ba 100644 --- a/src/libstat/stat_process.c +++ b/src/libstat/stat_process.c @@ -323,17 +323,6 @@ rspamd_stat_backends_process (struct rspamd_stat_ctx *st_ctx, if (bk_run != NULL) { st->backend->process_tokens (task, task->tokens, i, bk_run); - - if (st->stcf->is_spam) { - cl->spam_learns = st->backend->total_learns (task, - bk_run, - st_ctx); - } - else { - cl->ham_learns = st->backend->total_learns (task, - bk_run, - st_ctx); - } } } } @@ -372,6 +361,8 @@ rspamd_stat_classifiers_process (struct rspamd_stat_ctx *st_ctx, { guint i; struct rspamd_classifier *cl; + struct rspamd_statfile *st; + gpointer bk_run; if (st_ctx->classifiers->len == 0) { return; @@ -391,8 +382,34 @@ rspamd_stat_classifiers_process (struct rspamd_stat_ctx *st_ctx, return; } + for (i = 0; i < st_ctx->statfiles->len; i++) { + st = g_ptr_array_index (st_ctx->statfiles, i); + cl = st->classifier; + + if (cl->cfg->flags & RSPAMD_FLAG_CLASSIFIER_NO_BACKEND) { + continue; + } + + bk_run = g_ptr_array_index (task->stat_runtimes, i); + g_assert (st != NULL); + + if (bk_run != NULL) { + if (st->stcf->is_spam) { + cl->spam_learns += st->backend->total_learns (task, + bk_run, + st_ctx); + } + else { + cl->ham_learns += st->backend->total_learns (task, + bk_run, + st_ctx); + } + } + } + for (i = 0; i < st_ctx->classifiers->len; i++) { cl = g_ptr_array_index (st_ctx->classifiers, i); + g_assert (cl != NULL); if (cl->cfg->min_tokens > 0 && task->tokens->len < cl->cfg->min_tokens) { |