Mercurial > dovecot > original-hg > dovecot-1.2
changeset 9044:720560d19f5b HEAD
virtual: Fixed handling multiple mailboxes using the same search args.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 17 May 2009 18:29:35 -0400 |
parents | ef33393452f7 |
children | 1e9bb18eb439 |
files | src/plugins/virtual/virtual-config.c src/plugins/virtual/virtual-storage.c src/plugins/virtual/virtual-sync.c |
diffstat | 3 files changed, 18 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/plugins/virtual/virtual-config.c Sun May 17 18:28:55 2009 -0400 +++ b/src/plugins/virtual/virtual-config.c Sun May 17 18:29:35 2009 -0400 @@ -291,6 +291,20 @@ 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 @@ "%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;
--- a/src/plugins/virtual/virtual-storage.c Sun May 17 18:28:55 2009 -0400 +++ b/src/plugins/virtual/virtual-storage.c Sun May 17 18:29:35 2009 -0400 @@ -230,6 +230,8 @@ } 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;
--- a/src/plugins/virtual/virtual-sync.c Sun May 17 18:28:55 2009 -0400 +++ b/src/plugins/virtual/virtual-sync.c Sun May 17 18:29:35 2009 -0400 @@ -469,7 +469,6 @@ 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 @@ &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