dovecot-2.2: lib-storage: Added mail_search_init/deinit_arg()

dovecot at dovecot.org dovecot at dovecot.org
Mon May 18 10:39:32 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/eafbf9a13bbd
changeset: 18723:eafbf9a13bbd
user:      Timo Sirainen <tss at iki.fi>
date:      Mon May 18 06:36:56 2015 -0400
description:
lib-storage: Added mail_search_init/deinit_arg()
For forcibly initializing/deinitializing search args.

diffstat:

 src/lib-storage/mail-search.c |  23 ++++++++++-------------
 src/lib-storage/mail-search.h |  13 +++++++++++--
 2 files changed, 21 insertions(+), 15 deletions(-)

diffs (94 lines):

diff -r e6513dd519d5 -r eafbf9a13bbd src/lib-storage/mail-search.c
--- a/src/lib-storage/mail-search.c	Mon May 18 06:21:50 2015 -0400
+++ b/src/lib-storage/mail-search.c	Mon May 18 06:36:56 2015 -0400
@@ -60,8 +60,7 @@
 	}
 }
 
-static void
-mail_search_args_init_sub(struct mail_search_args *args,
+void mail_search_arg_init(struct mail_search_args *args,
 			  struct mail_search_arg *arg,
 			  bool change_uidsets,
 			  const ARRAY_TYPE(seq_range) *search_saved_uidset)
@@ -118,9 +117,9 @@
 			/* fall through */
 		case SEARCH_SUB:
 		case SEARCH_OR:
-			mail_search_args_init_sub(args, arg->value.subargs,
-						  change_uidsets,
-						  search_saved_uidset);
+			mail_search_arg_init(args, arg->value.subargs,
+					     change_uidsets,
+					     search_saved_uidset);
 			break;
 		default:
 			break;
@@ -142,12 +141,11 @@
 	args->box = box;
 	if (!args->simplified)
 		mail_search_args_simplify(args);
-	mail_search_args_init_sub(args, args->args, change_uidsets,
-				  search_saved_uidset);
+	mail_search_arg_init(args, args->args, change_uidsets,
+			     search_saved_uidset);
 }
 
-static void mail_search_args_deinit_sub(struct mail_search_args *args,
-					struct mail_search_arg *arg)
+void mail_search_arg_deinit(struct mail_search_arg *arg)
 {
 	for (; arg != NULL; arg = arg->next) {
 		switch (arg->type) {
@@ -165,8 +163,7 @@
 			break;
 		case SEARCH_INTHREAD:
 			i_assert(arg->initialized.search_args->refcount > 0);
-			if (args->refcount == 0 &&
-			    arg->value.search_result != NULL) {
+			if (arg->value.search_result != NULL) {
 				mailbox_search_result_free(
 					&arg->value.search_result);
 			}
@@ -175,7 +172,7 @@
 			/* fall through */
 		case SEARCH_SUB:
 		case SEARCH_OR:
-			mail_search_args_deinit_sub(args, arg->value.subargs);
+			mail_search_arg_deinit(arg->value.subargs);
 			break;
 		default:
 			break;
@@ -188,7 +185,7 @@
 	if (--args->init_refcount > 0)
 		return;
 
-	mail_search_args_deinit_sub(args, args->args);
+	mail_search_arg_deinit(args->args);
 	args->box = NULL;
 }
 
diff -r e6513dd519d5 -r eafbf9a13bbd src/lib-storage/mail-search.h
--- a/src/lib-storage/mail-search.h	Mon May 18 06:21:50 2015 -0400
+++ b/src/lib-storage/mail-search.h	Mon May 18 06:36:56 2015 -0400
@@ -132,9 +132,18 @@
 			   struct mailbox *box, bool change_uidsets,
 			   const ARRAY_TYPE(seq_range) *search_saved_uidset)
 	ATTR_NULL(4);
-/* Free keywords. The args can initialized afterwards again if needed.
-   The args can be reused for other queries after calling this. */
+/* Initialize arg and its children. args is used for getting mailbox and
+   pool. */
+void mail_search_arg_init(struct mail_search_args *args,
+			  struct mail_search_arg *arg,
+			  bool change_uidsets,
+			  const ARRAY_TYPE(seq_range) *search_saved_uidset);
+/* Free memory allocated by mail_search_args_init(). The args can initialized
+   afterwards again if needed. The args can be reused for other queries after
+   calling this. */
 void mail_search_args_deinit(struct mail_search_args *args);
+/* Free arg and its children. */
+void mail_search_arg_deinit(struct mail_search_arg *arg);
 /* Convert sequence sets in args to UIDs. */
 void mail_search_args_seq2uid(struct mail_search_args *args);
 /* Returns TRUE if the two search arguments are fully compatible.


More information about the dovecot-cvs mailing list