aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstat/stat_config.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstat/stat_config.c')
-rw-r--r--src/libstat/stat_config.c43
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)
{