dovecot-2.2-pigeonhole: lib-sieve: Flush duplicate database befo...
pigeonhole at rename-it.nl
pigeonhole at rename-it.nl
Fri Oct 17 19:07:47 UTC 2014
details: http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/971eba8c3361
changeset: 1925:971eba8c3361
user: Stephan Bosch <stephan at rename-it.nl>
date: Fri Oct 17 21:07:36 2014 +0200
description:
lib-sieve: Flush duplicate database before committing storage transactions.
diffstat:
src/lib-sieve/sieve-actions.c | 9 +++++++++
src/lib-sieve/sieve-actions.h | 2 ++
src/lib-sieve/sieve-result.c | 7 +++++++
src/lib-sieve/sieve-types.h | 2 ++
src/plugins/lda-sieve/lda-sieve-plugin.c | 9 +++++++++
5 files changed, 29 insertions(+), 0 deletions(-)
diffs (95 lines):
diff -r a856f89b54ca -r 971eba8c3361 src/lib-sieve/sieve-actions.c
--- a/src/lib-sieve/sieve-actions.c Fri Oct 17 20:49:57 2014 +0200
+++ b/src/lib-sieve/sieve-actions.c Fri Oct 17 21:07:36 2014 +0200
@@ -780,6 +780,15 @@
senv->duplicate_mark(senv, id, id_size, time);
}
+void sieve_action_duplicate_flush
+(const struct sieve_script_env *senv)
+{
+ if ( senv->duplicate_flush == NULL )
+ return;
+ senv->duplicate_flush(senv);
+}
+
+
/* Rejecting the mail */
static bool sieve_action_do_reject_mail
diff -r a856f89b54ca -r 971eba8c3361 src/lib-sieve/sieve-actions.h
--- a/src/lib-sieve/sieve-actions.h Fri Oct 17 20:49:57 2014 +0200
+++ b/src/lib-sieve/sieve-actions.h Fri Oct 17 21:07:36 2014 +0200
@@ -265,6 +265,8 @@
void sieve_action_duplicate_mark
(const struct sieve_script_env *senv, const void *id, size_t id_size,
time_t time);
+void sieve_action_duplicate_flush
+ (const struct sieve_script_env *senv);
/* Rejecting mail */
diff -r a856f89b54ca -r 971eba8c3361 src/lib-sieve/sieve-result.c
--- a/src/lib-sieve/sieve-result.c Fri Oct 17 20:49:57 2014 +0200
+++ b/src/lib-sieve/sieve-result.c Fri Oct 17 21:07:36 2014 +0200
@@ -1248,8 +1248,10 @@
struct sieve_result_action *last,
bool *implicit_keep, bool *keep)
{
+ const struct sieve_script_env *senv = result->action_env.scriptenv;
struct sieve_result_action *rac;
int commit_status = status;
+ bool dup_flushed = FALSE;
/* First commit/rollback all storage actions */
rac = first;
@@ -1262,6 +1264,11 @@
continue;
}
+ if (!dup_flushed) {
+ sieve_action_duplicate_flush(senv);
+ dup_flushed = TRUE;
+ }
+
status = sieve_result_action_commit_or_rollback
(result, rac, status, implicit_keep, keep, &commit_status);
diff -r a856f89b54ca -r 971eba8c3361 src/lib-sieve/sieve-types.h
--- a/src/lib-sieve/sieve-types.h Fri Oct 17 20:49:57 2014 +0200
+++ b/src/lib-sieve/sieve-types.h Fri Oct 17 21:07:36 2014 +0200
@@ -206,6 +206,8 @@
void (*duplicate_mark)
(const struct sieve_script_env *senv, const void *id, size_t id_size,
time_t time);
+ void (*duplicate_flush)
+ (const struct sieve_script_env *senv);
/* Interface for rejecting mail */
int (*reject_mail)(const struct sieve_script_env *senv,
diff -r a856f89b54ca -r 971eba8c3361 src/plugins/lda-sieve/lda-sieve-plugin.c
--- a/src/plugins/lda-sieve/lda-sieve-plugin.c Fri Oct 17 20:49:57 2014 +0200
+++ b/src/plugins/lda-sieve/lda-sieve-plugin.c Fri Oct 17 21:07:36 2014 +0200
@@ -132,6 +132,14 @@
duplicate_mark(dctx->dup_ctx, id, id_size, senv->user->username, time);
}
+static void lda_sieve_duplicate_flush
+(const struct sieve_script_env *senv)
+{
+ struct mail_deliver_context *dctx =
+ (struct mail_deliver_context *) senv->script_context;
+ duplicate_flush(dctx->dup_ctx);
+}
+
/*
* Plugin implementation
*/
@@ -906,6 +914,7 @@
scriptenv.smtp_finish = lda_sieve_smtp_finish;
scriptenv.duplicate_mark = lda_sieve_duplicate_mark;
scriptenv.duplicate_check = lda_sieve_duplicate_check;
+ scriptenv.duplicate_flush = lda_sieve_duplicate_flush;
scriptenv.reject_mail = lda_sieve_reject_mail;
scriptenv.script_context = (void *) mdctx;
scriptenv.exec_status = &estatus;
More information about the dovecot-cvs
mailing list