diff options
Diffstat (limited to 'src/libstat/stat_config.c')
-rw-r--r-- | src/libstat/stat_config.c | 43 |
1 files changed, 31 insertions, 12 deletions
diff --git a/src/libstat/stat_config.c b/src/libstat/stat_config.c index 8c935ec4e..c75b02fe0 100644 --- a/src/libstat/stat_config.c +++ b/src/libstat/stat_config.c @@ -55,19 +55,23 @@ static struct rspamd_stat_tokenizer stat_tokenizers[] = { }, }; -static struct rspamd_stat_backend stat_backends[] = { - { - .name = RSPAMD_DEFAULT_BACKEND, - .init = rspamd_mmaped_file_init, - .runtime = rspamd_mmaped_file_runtime, - .process_token = rspamd_mmaped_file_process_token, - .learn_token = rspamd_mmaped_file_learn_token, - .finalize_learn = rspamd_mmaped_file_finalize_learn, - .total_learns = rspamd_mmaped_file_total_learns, - .inc_learns = rspamd_mmaped_file_inc_learns, - .dec_learns = rspamd_mmaped_file_dec_learns, - .get_stat = rspamd_mmaped_file_get_stat +#define RSPAMD_STAT_BACKEND_ELT(nam, eltn) { \ + .name = #nam, \ + .init = rspamd_##eltn##_init, \ + .runtime = rspamd_##eltn##_runtime, \ + .process_token = rspamd_##eltn##_process_token, \ + .learn_token = rspamd_##eltn##_learn_token, \ + .finalize_learn = rspamd_##eltn##_finalize_learn, \ + .total_learns = rspamd_##eltn##_total_learns, \ + .inc_learns = rspamd_##eltn##_inc_learns, \ + .dec_learns = rspamd_##eltn##_dec_learns, \ + .get_stat = rspamd_##eltn##_get_stat, \ + .close = rspamd_##eltn##_close \ } + +static struct rspamd_stat_backend stat_backends[] = { + RSPAMD_STAT_BACKEND_ELT(mmap, mmaped_file), + RSPAMD_STAT_BACKEND_ELT(sqlite3, sqlite3) }; static struct rspamd_stat_cache stat_caches[] = { @@ -110,6 +114,21 @@ rspamd_stat_init (struct rspamd_config *cfg) } } +void +rspamd_stat_close (void) +{ + guint i; + + g_assert (stat_ctx != NULL); + + for (i = 0; i < stat_ctx->backends_count; i ++) { + if (stat_ctx->backends[i].close != NULL) { + stat_ctx->backends[i].close (stat_ctx->backends[i].ctx); + msg_debug ("closed backend %s", stat_ctx->backends[i].name); + } + } +} + struct rspamd_stat_ctx * rspamd_stat_get_ctx (void) { |