gboolean (*learn_token)(struct token_node_s *tok,
struct rspamd_token_result *res, gpointer ctx);
gulong (*total_learns)(struct rspamd_statfile_runtime *runtime, gpointer ctx);
+ void (*finalize_learn)(struct rspamd_statfile_runtime *runtime, gpointer ctx);
gulong (*inc_learns)(struct rspamd_statfile_runtime *runtime, gpointer ctx);
gulong (*dec_learns)(struct rspamd_statfile_runtime *runtime, gpointer ctx);
ucl_object_t* (*get_stat)(struct rspamd_statfile_runtime *runtime, gpointer ctx);
gboolean rspamd_mmaped_file_learn_token (struct token_node_s *tok,
struct rspamd_token_result *res,
gpointer ctx);
+void rspamd_mmaped_file_finalize_learn (struct rspamd_statfile_runtime *runtime,
+ gpointer ctx);
gulong rspamd_mmaped_file_total_learns (struct rspamd_statfile_runtime *runtime,
gpointer ctx);
gulong rspamd_mmaped_file_inc_learns (struct rspamd_statfile_runtime *runtime,
return res;
}
+
+void
+rspamd_mmaped_file_finalize_learn (struct rspamd_statfile_runtime *runtime,
+ gpointer ctx)
+{
+ rspamd_mmaped_file_t *mf = (rspamd_mmaped_file_t *)runtime;
+
+ if (mf != NULL) {
+ msync (mf->map, mf->len, MS_INVALIDATE | MS_ASYNC);
+ }
+}
.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,
st_run->st->symbol, nrev);
}
+ st_run->backend->finalize_learn (st_run->backend_runtime,
+ st_run->backend->ctx);
+
curst = g_list_next (curst);
}
}