]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
virtual: Fixed handling multiple mailboxes using the same search args.
authorTimo Sirainen <tss@iki.fi>
Sun, 17 May 2009 22:29:35 +0000 (18:29 -0400)
committerTimo Sirainen <tss@iki.fi>
Sun, 17 May 2009 22:29:35 +0000 (18:29 -0400)
--HG--
branch : HEAD

src/plugins/virtual/virtual-config.c
src/plugins/virtual/virtual-storage.c
src/plugins/virtual/virtual-sync.c

index 1c08135b1913cd45ca966968f870f7c1beb5fe48..ef6e8129698faab51d9bf0ecc64109c107c04dd2 100644 (file)
@@ -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;
index 737f083abab855d4af56c4434ac35fcafb62fdd7..5469db4aa35452d08034ab6ab668e8ffd6ad2285 100644 (file)
@@ -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;
index 63d5bb852138df425b87cecb3b63d1453296efbb..18c1c33fca760e5735ed3c85ca69b895613b0a8a 100644 (file)
@@ -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