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