From: Timo Sirainen Date: Sun, 17 May 2009 22:29:35 +0000 (-0400) Subject: virtual: Fixed handling multiple mailboxes using the same search args. X-Git-Tag: 2.0.alpha1~738 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3b1bf68d26c9f2fe4a649f40cf375d52acffc81c;p=thirdparty%2Fdovecot%2Fcore.git virtual: Fixed handling multiple mailboxes using the same search args. --HG-- branch : HEAD --- diff --git a/src/plugins/virtual/virtual-config.c b/src/plugins/virtual/virtual-config.c index 1c08135b19..ef6e812969 100644 --- a/src/plugins/virtual/virtual-config.c +++ b/src/plugins/virtual/virtual-config.c @@ -291,6 +291,20 @@ static int virtual_config_expand_wildcards(struct virtual_parse_context *ctx) return mailbox_list_iter_deinit(&iter); } +static void virtual_config_search_args_dup(struct virtual_mailbox *mbox) +{ + struct virtual_backend_box *const *bboxes; + struct mail_search_args *old_args; + unsigned int i, count; + + bboxes = array_get_modifiable(&mbox->backend_boxes, &count); + for (i = 0; i < count; i++) { + old_args = bboxes[i]->search_args; + bboxes[i]->search_args = mail_search_args_dup(old_args); + mail_search_args_unref(&old_args); + } +} + int virtual_config_read(struct virtual_mailbox *mbox) { struct mail_user *user = mbox->storage->storage.ns->user; @@ -356,6 +370,8 @@ int virtual_config_read(struct virtual_mailbox *mbox) "%s: No mailboxes defined", path); ret = -1; } + if (ret == 0) + virtual_config_search_args_dup(mbox); i_stream_unref(&ctx.input); (void)close(fd); return ret; diff --git a/src/plugins/virtual/virtual-storage.c b/src/plugins/virtual/virtual-storage.c index 737f083aba..5469db4aa3 100644 --- a/src/plugins/virtual/virtual-storage.c +++ b/src/plugins/virtual/virtual-storage.c @@ -229,6 +229,8 @@ static int virtual_mailboxes_open(struct virtual_mailbox *mbox, } i_array_init(&bboxes[i]->uids, 64); i_array_init(&bboxes[i]->sync_pending_removes, 64); + mail_search_args_init(bboxes[i]->search_args, bboxes[i]->box, + FALSE, NULL); } if (i == count) return 0; diff --git a/src/plugins/virtual/virtual-sync.c b/src/plugins/virtual/virtual-sync.c index 63d5bb8521..18c1c33fca 100644 --- a/src/plugins/virtual/virtual-sync.c +++ b/src/plugins/virtual/virtual-sync.c @@ -469,7 +469,6 @@ static int virtual_sync_backend_box_init(struct virtual_backend_box *bbox) ret = mailbox_search_deinit(&search_ctx); mail_free(&mail); - mail_search_args_deinit(bbox->search_args); (void)mailbox_transaction_commit(&trans); return ret; } @@ -912,8 +911,6 @@ static int virtual_sync_backend_box(struct virtual_sync_context *ctx, &status) < 0) return -1; - mail_search_args_init(bbox->search_args, bbox->box, - FALSE, NULL); virtual_backend_box_sync_mail_set(bbox); if (status.uidvalidity != bbox->sync_uid_validity) { /* UID validity changed since last sync (or this is