changeset 21650:5fb623020110

lib-storage: Add asserts to make sure lookup_abort is being used correctly.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Mon, 20 Feb 2017 19:35:45 +0200
parents 78f38a28086e
children 79d9124f8c8b
files src/lib-storage/index/index-search.c src/lib-storage/index/index-sort.c
diffstat 2 files changed, 7 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/index-search.c	Mon Feb 20 19:34:25 2017 +0200
+++ b/src/lib-storage/index/index-search.c	Mon Feb 20 19:35:45 2017 +0200
@@ -1479,6 +1479,8 @@
 		   do a prefetch first and the final search later */
 		n--;
 	}
+
+	i_assert(ctx->cur_mail->lookup_abort == MAIL_LOOKUP_ABORT_NEVER);
 	for (i = 0; i < n && ret < 0; i++) {
 		ctx->cur_mail->lookup_abort = cache_lookups[i];
 		T_BEGIN {
--- a/src/lib-storage/index/index-sort.c	Mon Feb 20 19:34:25 2017 +0200
+++ b/src/lib-storage/index/index-sort.c	Mon Feb 20 19:35:45 2017 +0200
@@ -45,6 +45,7 @@
 		break;
 	case MAIL_ERROR_LOOKUP_ABORTED:
 		/* just change the error message */
+		i_assert(program->slow_mails_left == 0);
 		mail_storage_set_error(program->t->box->storage, MAIL_ERROR_LIMIT,
 			"Requested sort would have taken too long.");
 		/* fall through */
@@ -169,12 +170,14 @@
 void index_sort_list_add(struct mail_search_sort_program *program,
 			 struct mail *mail)
 {
-	enum mail_lookup_abort orig_abort = mail->lookup_abort;
 	enum mail_access_type orig_access_type = mail->access_type;
 	bool prev_slow = mail->mail_stream_opened ||
 		mail->mail_metadata_accessed;
 
 	i_assert(mail->transaction == program->t);
+	/* if lookup_abort isn't NEVER, mail_sort_max_read_count handling
+	   doesn't work right. */
+	i_assert(mail->lookup_abort == MAIL_LOOKUP_ABORT_NEVER);
 
 	if (program->slow_mails_left == 0)
 		mail->lookup_abort = MAIL_LOOKUP_ABORT_NOT_IN_CACHE;
@@ -190,7 +193,7 @@
 		i_assert(program->slow_mails_left > 0);
 		program->slow_mails_left--;
 	}
-	mail->lookup_abort = orig_abort;
+	mail->lookup_abort = MAIL_LOOKUP_ABORT_NEVER;
 }
 
 static int sort_node_date_cmp(const struct mail_sort_node_date *n1,