From: Vsevolod Stakhov Date: Wed, 4 Aug 2010 13:50:57 +0000 (+0400) Subject: * Fix wirting message id during fuzzy_add command X-Git-Tag: 0.3.2~35 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=80b5b55a53622875d4973ea1d440dc7fa916f20b;p=thirdparty%2Frspamd.git * Fix wirting message id during fuzzy_add command * Display weight of symbols correctly --- diff --git a/src/filter.c b/src/filter.c index d5e127b7aa..9e2da0c57c 100644 --- a/src/filter.c +++ b/src/filter.c @@ -97,7 +97,7 @@ insert_metric_result (struct worker_task *task, struct metric *metric, const cha memory_pool_add_destructor (task->task_pool, (pool_destruct_func) g_list_free, s->options); } - s->score = w; + s->score += w; } else { s = memory_pool_alloc (task->task_pool, sizeof (struct symbol)); diff --git a/src/main.h b/src/main.h index 697c63f472..091daf1688 100644 --- a/src/main.h +++ b/src/main.h @@ -257,6 +257,8 @@ struct worker_task* construct_task (struct rspamd_worker *worker); * Destroy task object and remove its IO dispatcher if it exists */ void free_task (struct worker_task *task, gboolean is_soft); +void free_task_hard (gpointer ud); +void free_task_soft (gpointer ud); /** * If set, reopen log file on next write diff --git a/src/plugins/fuzzy_check.c b/src/plugins/fuzzy_check.c index 49b9b976e0..9142ca49e9 100644 --- a/src/plugins/fuzzy_check.c +++ b/src/plugins/fuzzy_check.c @@ -718,7 +718,8 @@ fuzzy_process_handler (struct controller_session *session, f_str_t * in) } } - free_task (task, FALSE); + memory_pool_add_destructor (session->session_pool, (pool_destruct_func)free_task_soft, task); + if (*saved == 0) { session->state = STATE_REPLY; r = rspamd_snprintf (out_buf, sizeof (out_buf), "no hashes written" CRLF); diff --git a/src/worker.c b/src/worker.c index 15b73e2c7f..d249843b83 100644 --- a/src/worker.c +++ b/src/worker.c @@ -277,8 +277,16 @@ free_task (struct worker_task *task, gboolean is_soft) } } -static void -free_task_hard (void *ud) +void +free_task_hard (gpointer ud) +{ + struct worker_task *task = ud; + + free_task (task, FALSE); +} + +void +free_task_soft (gpointer ud) { struct worker_task *task = ud;