dovecot-2.2: virtual: Delay initializing search args until the m...
dovecot at dovecot.org
dovecot at dovecot.org
Wed Apr 23 13:32:04 UTC 2014
details: http://hg.dovecot.org/dovecot-2.2/rev/0aa159d6ef30
changeset: 17248:0aa159d6ef30
user: Timo Sirainen <tss at iki.fi>
date: Wed Apr 23 16:31:36 2014 +0300
description:
virtual: Delay initializing search args until the mailbox is actually opened.
Fixes assert-crash caused by recent changes when virtual mailbox search args
contained e.g. keywords.
diffstat:
src/plugins/virtual/virtual-storage.c | 5 ++---
src/plugins/virtual/virtual-storage.h | 1 +
src/plugins/virtual/virtual-sync.c | 8 ++++++++
3 files changed, 11 insertions(+), 3 deletions(-)
diffs (65 lines):
diff -r 09c114091c88 -r 0aa159d6ef30 src/plugins/virtual/virtual-storage.c
--- a/src/plugins/virtual/virtual-storage.c Tue Apr 22 13:15:21 2014 +0300
+++ b/src/plugins/virtual/virtual-storage.c Wed Apr 23 16:31:36 2014 +0300
@@ -178,7 +178,6 @@
i_array_init(&bbox->uids, 64);
i_array_init(&bbox->sync_pending_removes, 64);
- mail_search_args_init(bbox->search_args, bbox->box, FALSE, NULL);
return 1;
}
@@ -195,7 +194,6 @@
if (ret <= 0) {
if (ret < 0)
break;
- mail_search_args_unref(&bboxes[i]->search_args);
array_delete(&mbox->backend_boxes, i, 1);
bboxes = array_get(&mbox->backend_boxes, &count);
} else {
@@ -251,7 +249,8 @@
if (bboxes[i]->box == NULL)
continue;
- mail_search_args_deinit(bboxes[i]->search_args);
+ if (bboxes[i]->search_args != NULL)
+ mail_search_args_deinit(bboxes[i]->search_args);
mailbox_free(&bboxes[i]->box);
if (array_is_created(&bboxes[i]->sync_outside_expunges))
array_free(&bboxes[i]->sync_outside_expunges);
diff -r 09c114091c88 -r 0aa159d6ef30 src/plugins/virtual/virtual-storage.h
--- a/src/plugins/virtual/virtual-storage.h Tue Apr 22 13:15:21 2014 +0300
+++ b/src/plugins/virtual/virtual-storage.h Wed Apr 23 16:31:36 2014 +0300
@@ -96,6 +96,7 @@
unsigned int wildcard:1;
unsigned int clear_recent:1;
unsigned int uids_nonsorted:1;
+ unsigned int search_args_initialized:1;
};
ARRAY_DEFINE_TYPE(virtual_backend_box, struct virtual_backend_box *);
diff -r 09c114091c88 -r 0aa159d6ef30 src/plugins/virtual/virtual-sync.c
--- a/src/plugins/virtual/virtual-sync.c Tue Apr 22 13:15:21 2014 +0300
+++ b/src/plugins/virtual/virtual-sync.c Wed Apr 23 16:31:36 2014 +0300
@@ -460,6 +460,10 @@
trans = mailbox_transaction_begin(bbox->box, 0);
+ if (!bbox->search_args_initialized) {
+ mail_search_args_init(bbox->search_args, bbox->box, FALSE, NULL);
+ bbox->search_args_initialized = TRUE;
+ }
search_ctx = mailbox_search_init(trans, bbox->search_args, NULL,
0, NULL);
@@ -677,6 +681,10 @@
/* initialize the search result from all the existing messages in
virtual index. */
+ if (!bbox->search_args_initialized) {
+ mail_search_args_init(bbox->search_args, bbox->box, FALSE, NULL);
+ bbox->search_args_initialized = TRUE;
+ }
result = mailbox_search_result_alloc(bbox->box, bbox->search_args,
result_flags);
mailbox_search_result_initial_done(result);
More information about the dovecot-cvs
mailing list