]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Moved index transaction/view from index_transaction to mailbox_transaction.
authorTimo Sirainen <tss@iki.fi>
Fri, 19 Mar 2010 13:13:24 +0000 (15:13 +0200)
committerTimo Sirainen <tss@iki.fi>
Fri, 19 Mar 2010 13:13:24 +0000 (15:13 +0200)
--HG--
branch : HEAD

13 files changed:
src/lib-storage/index/cydir/cydir-save.c
src/lib-storage/index/dbox-multi/mdbox-save.c
src/lib-storage/index/dbox-single/sdbox-save.c
src/lib-storage/index/index-mail.c
src/lib-storage/index/index-search.c
src/lib-storage/index/index-sort-string.c
src/lib-storage/index/index-storage.h
src/lib-storage/index/index-transaction.c
src/lib-storage/index/maildir/maildir-save.c
src/lib-storage/index/mbox/mbox-mail.c
src/lib-storage/index/mbox/mbox-save.c
src/lib-storage/mail-storage-private.h
src/plugins/expire/expire-plugin.c

index f9927bd8efdae7c99ba73cd4e15e15663e985fd8..01fac8adf4fceb38f5e3593109151460bb47e71b 100644 (file)
@@ -58,8 +58,6 @@ cydir_get_save_path(struct cydir_save_context *ctx, unsigned int num)
 struct mail_save_context *
 cydir_save_alloc(struct mailbox_transaction_context *t)
 {
-       struct index_transaction_context *it =
-               (struct index_transaction_context *)t;
        struct cydir_mailbox *mbox = (struct cydir_mailbox *)t->box;
        struct cydir_save_context *ctx =
                (struct cydir_save_context *)t->save_ctx;
@@ -70,7 +68,7 @@ cydir_save_alloc(struct mailbox_transaction_context *t)
                ctx = i_new(struct cydir_save_context, 1);
                ctx->ctx.transaction = t;
                ctx->mbox = mbox;
-               ctx->trans = it->trans;
+               ctx->trans = t->itrans;
                ctx->tmp_basename = cydir_generate_tmp_filename();
                t->save_ctx = &ctx->ctx;
        }
index a21239c14f08c1957df744265b35bdc334c2775a..712eee9d78033f4217410ae045424a6ac04a9e5c 100644 (file)
@@ -45,8 +45,6 @@ static struct dbox_file *
 mdbox_copy_file_get_file(struct mailbox_transaction_context *t,
                         uint32_t seq, uoff_t *offset_r)
 {
-       struct index_transaction_context *it =
-               (struct index_transaction_context *)t;
        struct mdbox_save_context *ctx =
                (struct mdbox_save_context *)t->save_ctx;
        const struct mdbox_mail_index_record *rec;
@@ -54,7 +52,7 @@ mdbox_copy_file_get_file(struct mailbox_transaction_context *t,
        bool expunged;
        uint32_t file_id;
 
-       mail_index_lookup_ext(it->trans_view, seq, ctx->mbox->ext_id,
+       mail_index_lookup_ext(t->view, seq, ctx->mbox->ext_id,
                              &data, &expunged);
        rec = data;
 
@@ -98,8 +96,6 @@ mdbox_save_file_get_file(struct mailbox_transaction_context *t,
 struct mail_save_context *
 mdbox_save_alloc(struct mailbox_transaction_context *t)
 {
-       struct index_transaction_context *it =
-               (struct index_transaction_context *)t;
        struct mdbox_mailbox *mbox = (struct mdbox_mailbox *)t->box;
        struct mdbox_save_context *ctx =
                (struct mdbox_save_context *)t->save_ctx;
@@ -114,7 +110,7 @@ mdbox_save_alloc(struct mailbox_transaction_context *t)
 
        ctx = i_new(struct mdbox_save_context, 1);
        ctx->ctx.ctx.transaction = t;
-       ctx->ctx.trans = it->trans;
+       ctx->ctx.trans = t->itrans;
        ctx->mbox = mbox;
        ctx->append_ctx = dbox_map_append_begin(mbox->storage->map, 0);
        i_array_init(&ctx->mails, 32);
index eaf59fe37e0d2268be229f813c940af1f3e7e3ef..70afc590dabb8dda8c913cb36537950d9381d464 100644 (file)
@@ -49,8 +49,6 @@ sdbox_save_file_get_file(struct mailbox_transaction_context *t, uint32_t seq)
 struct mail_save_context *
 sdbox_save_alloc(struct mailbox_transaction_context *t)
 {
-       struct index_transaction_context *it =
-               (struct index_transaction_context *)t;
        struct sdbox_mailbox *mbox = (struct sdbox_mailbox *)t->box;
        struct sdbox_save_context *ctx =
                (struct sdbox_save_context *)t->save_ctx;
@@ -65,7 +63,7 @@ sdbox_save_alloc(struct mailbox_transaction_context *t)
 
        ctx = i_new(struct sdbox_save_context, 1);
        ctx->ctx.ctx.transaction = t;
-       ctx->ctx.trans = it->trans;
+       ctx->ctx.trans = t->itrans;
        ctx->mbox = mbox;
        i_array_init(&ctx->files, 32);
        t->save_ctx = &ctx->ctx.ctx;
index 1dce8fa0714fd5965d830918211932dd51c8d680..f5217234173144d3cbab830c087ac8bc416409e9 100644 (file)
@@ -124,17 +124,16 @@ bool index_mail_get_cached_uoff_t(struct index_mail *mail,
                                          size_r, sizeof(*size_r));
 }
 
-enum mail_flags index_mail_get_flags(struct mail *_mail)
+enum mail_flags index_mail_get_flags(struct mail *mail)
 {
-       struct index_mail *mail = (struct index_mail *)_mail;
        const struct mail_index_record *rec;
        enum mail_flags flags;
 
-       rec = mail_index_lookup(mail->trans->trans_view, _mail->seq);
+       rec = mail_index_lookup(mail->transaction->view, mail->seq);
        flags = rec->flags & (MAIL_FLAGS_NONRECENT |
                              MAIL_INDEX_MAIL_FLAG_BACKEND);
 
-       if (index_mailbox_is_recent(_mail->box, _mail->uid))
+       if (index_mailbox_is_recent(mail->box, mail->uid))
                flags |= MAIL_RECENT;
 
        return flags;
@@ -149,7 +148,7 @@ uint64_t index_mail_get_modseq(struct mail *_mail)
 
        mail_index_modseq_enable(_mail->box->index);
        mail->data.modseq =
-               mail_index_modseq_lookup(mail->trans->trans_view, _mail->seq);
+               mail_index_modseq_lookup(_mail->transaction->view, _mail->seq);
        return mail->data.modseq;
 }
 
@@ -190,7 +189,7 @@ index_mail_get_keyword_indexes(struct mail *_mail)
 
        if (!array_is_created(&data->keyword_indexes)) {
                p_array_init(&data->keyword_indexes, mail->data_pool, 32);
-               mail_index_lookup_keywords(mail->trans->trans_view,
+               mail_index_lookup_keywords(_mail->transaction->view,
                                           mail->data.seq,
                                           &data->keyword_indexes);
        }
@@ -1215,10 +1214,10 @@ void index_mail_set_seq(struct mail *_mail, uint32_t seq)
        data->seq = seq;
 
        mail->mail.mail.seq = seq;
-       mail_index_lookup_uid(mail->trans->trans_view, seq,
+       mail_index_lookup_uid(_mail->transaction->view, seq,
                              &mail->mail.mail.uid);
 
-       if (mail_index_view_is_inconsistent(mail->trans->trans_view)) {
+       if (mail_index_view_is_inconsistent(_mail->transaction->view)) {
                mail_set_expunged(&mail->mail.mail);
                return;
        }
@@ -1418,14 +1417,14 @@ void index_mail_cache_parse_deinit(struct mail *_mail, time_t received_date,
        (void)index_mail_parse_body_finish(mail, 0);
 }
 
-static void index_mail_drop_recent_flag(struct index_mail *imail)
+static void index_mail_drop_recent_flag(struct mail *mail)
 {
        const struct mail_index_header *hdr;
-       uint32_t first_recent_uid = imail->mail.mail.uid + 1;
+       uint32_t first_recent_uid = mail->uid + 1;
 
-       hdr = mail_index_get_header(imail->trans->trans_view);
+       hdr = mail_index_get_header(mail->transaction->view);
        if (hdr->first_recent_uid < first_recent_uid) {
-               mail_index_update_header(imail->trans->trans,
+               mail_index_update_header(mail->transaction->itrans,
                        offsetof(struct mail_index_header, first_recent_uid),
                        &first_recent_uid, sizeof(first_recent_uid), FALSE);
        }
@@ -1434,15 +1433,13 @@ static void index_mail_drop_recent_flag(struct index_mail *imail)
 void index_mail_update_flags(struct mail *mail, enum modify_type modify_type,
                             enum mail_flags flags)
 {
-       struct index_mail *imail = (struct index_mail *)mail;
-
        if ((flags & MAIL_RECENT) == 0 &&
            index_mailbox_is_recent(mail->box, mail->uid))
-               index_mail_drop_recent_flag(imail);
+               index_mail_drop_recent_flag(mail);
 
        flags &= MAIL_FLAGS_NONRECENT | MAIL_INDEX_MAIL_FLAG_BACKEND;
-       mail_index_update_flags(imail->trans->trans, mail->seq, modify_type,
-                               flags);
+       mail_index_update_flags(mail->transaction->itrans, mail->seq,
+                               modify_type, flags);
 }
 
 void index_mail_update_keywords(struct mail *mail, enum modify_type modify_type,
@@ -1462,35 +1459,31 @@ void index_mail_update_keywords(struct mail *mail, enum modify_type modify_type,
                       sizeof(imail->data.keywords));
        }
 
-       mail_index_update_keywords(imail->trans->trans, mail->seq, modify_type,
-                                  keywords);
+       mail_index_update_keywords(mail->transaction->itrans, mail->seq,
+                                  modify_type, keywords);
 }
 
 void index_mail_update_modseq(struct mail *mail, uint64_t min_modseq)
 {
-       struct index_mail *imail = (struct index_mail *)mail;
-
-       mail_index_update_modseq(imail->trans->trans, mail->seq, min_modseq);
+       mail_index_update_modseq(mail->transaction->itrans, mail->seq,
+                                min_modseq);
 }
 
 void index_mail_update_uid(struct mail *mail, uint32_t new_uid)
 {
-       struct index_mail *imail = (struct index_mail *)mail;
-
-       mail_index_update_uid(imail->trans->trans, mail->seq, new_uid);
+       mail_index_update_uid(mail->transaction->itrans, mail->seq, new_uid);
 }
 
 void index_mail_expunge(struct mail *mail)
 {
-       struct index_mail *imail = (struct index_mail *)mail;
        const char *value;
        uint8_t guid_128[MAIL_GUID_128_SIZE];
 
        if (mail_get_special(mail, MAIL_FETCH_GUID, &value) < 0)
-               mail_index_expunge(imail->trans->trans, mail->seq);
+               mail_index_expunge(mail->transaction->itrans, mail->seq);
        else {
                mail_generate_guid_128_hash(value, guid_128);
-               mail_index_expunge_guid(imail->trans->trans,
+               mail_index_expunge_guid(mail->transaction->itrans,
                                        mail->seq, guid_128);
        }
 }
index 49dc2766747f3ef6a4b71bba3882d2d88ddbe599..797f5a08271515300fa6121f9a07945e8bed5cd6 100644 (file)
@@ -1005,26 +1005,24 @@ static int search_build_inthreads(struct index_search_context *ctx,
 }
 
 struct mail_search_context *
-index_storage_search_init(struct mailbox_transaction_context *_t,
+index_storage_search_init(struct mailbox_transaction_context *t,
                          struct mail_search_args *args,
                          const enum mail_sort_type *sort_program)
 {
-       struct index_transaction_context *t =
-               (struct index_transaction_context *)_t;
        struct index_search_context *ctx;
        struct mailbox_status status;
 
        ctx = i_new(struct index_search_context, 1);
-       ctx->mail_ctx.transaction = _t;
-       ctx->box = _t->box;
-       ctx->view = t->trans_view;
+       ctx->mail_ctx.transaction = t;
+       ctx->box = t->box;
+       ctx->view = t->view;
        ctx->mail_ctx.args = args;
-       ctx->mail_ctx.sort_program = index_sort_program_init(_t, sort_program);
+       ctx->mail_ctx.sort_program = index_sort_program_init(t, sort_program);
        ctx->next_time_check_cost = SEARCH_INITIAL_MAX_COST;
        if (gettimeofday(&ctx->last_nonblock_timeval, NULL) < 0)
                i_fatal("gettimeofday() failed: %m");
 
-       mailbox_get_status(_t->box, STATUS_MESSAGES, &status);
+       mailbox_get_status(t->box, STATUS_MESSAGES, &status);
        ctx->mail_ctx.progress_max = status.messages;
 
        i_array_init(&ctx->mail_ctx.results, 5);
@@ -1033,7 +1031,7 @@ index_storage_search_init(struct mailbox_transaction_context *_t,
 
        mail_search_args_reset(ctx->mail_ctx.args->args, TRUE);
        if (args->have_inthreads) {
-               if (mail_thread_init(_t->box, NULL, &ctx->thread_ctx) < 0)
+               if (mail_thread_init(t->box, NULL, &ctx->thread_ctx) < 0)
                        ctx->failed = TRUE;
                if (search_build_inthreads(ctx, args->args) < 0)
                        ctx->failed = TRUE;
index e358a589d5bede2b1f83ddcf55d222fde3972f47..c705f5ff8634ac4b803b213e220ad5f3198673f4 100644 (file)
@@ -159,14 +159,12 @@ static void index_sort_reget_sort_ids(struct sort_string_context *ctx)
 static void index_sort_node_add(struct sort_string_context *ctx,
                                struct mail_sort_node *node)
 {
-       struct index_transaction_context *t =
-               (struct index_transaction_context *)ctx->program->t;
        struct mail_index_map *map;
        const void *data;
        uint32_t reset_id;
        bool expunged;
 
-       mail_index_lookup_ext_full(t->trans_view, node->seq,
+       mail_index_lookup_ext_full(ctx->program->t->view, node->seq,
                                   ctx->ext_id, &map, &data, &expunged);
        if (expunged) {
                /* we don't want to update expunged messages' sort IDs */
@@ -196,7 +194,7 @@ static void index_sort_node_add(struct sort_string_context *ctx,
        if (node->sort_id != 0) {
                /* if reset ID increases, lookup all existing messages' sort
                   IDs again. if it decreases, ignore the sort ID. */
-               if (!mail_index_ext_get_reset_id(t->trans_view, map,
+               if (!mail_index_ext_get_reset_id(ctx->program->t->view, map,
                                                 ctx->ext_id, &reset_id))
                        reset_id = 0;
                if (reset_id != ctx->highest_reset_id) {
@@ -686,8 +684,7 @@ index_sort_add_sort_ids(struct sort_string_context *ctx)
 
 static void index_sort_write_changed_sort_ids(struct sort_string_context *ctx)
 {
-       struct index_transaction_context *t =
-               (struct index_transaction_context *)ctx->program->t;
+       struct mail_index_transaction *itrans = ctx->program->t->itrans;
        uint32_t ext_id = ctx->ext_id;
        const struct mail_sort_node *nodes;
        unsigned int i, count;
@@ -698,7 +695,8 @@ static void index_sort_write_changed_sort_ids(struct sort_string_context *ctx)
                return;
        }
 
-       mail_index_ext_reset_inc(t->trans, ext_id, ctx->highest_reset_id, FALSE);
+       mail_index_ext_reset_inc(itrans, ext_id,
+                                ctx->highest_reset_id, FALSE);
 
        /* add the missing sort IDs to index */
        nodes = array_get_modifiable(&ctx->sorted_nodes, &count);
@@ -707,7 +705,7 @@ static void index_sort_write_changed_sort_ids(struct sort_string_context *ctx)
                if (!nodes[i].sort_id_changed || nodes[i].no_update)
                        continue;
 
-               mail_index_update_ext(t->trans, nodes[i].seq, ext_id,
+               mail_index_update_ext(itrans, nodes[i].seq, ext_id,
                                      &nodes[i].sort_id, NULL);
        }
 }
index bf229bf695887e7e76cf27e9118a5e321b70b74d..26f1be871d97cdcfde57ea56c6085d16731f0bc4 100644 (file)
@@ -23,8 +23,6 @@ struct index_transaction_context {
        struct mail_index_transaction_vfuncs super;
        int mail_ref_count;
 
-       struct mail_index_transaction *trans;
-       struct mail_index_view *trans_view;
        struct mail_cache_view *cache_view;
        struct mail_cache_transaction_ctx *cache_trans;
 };
index 34795ec6885c34413ea08118da39e983d7826704..a8d0cee75b5aee7321b9e23491e3e7715400e6ea 100644 (file)
@@ -8,7 +8,7 @@
 static void index_transaction_free(struct index_transaction_context *t)
 {
        mail_cache_view_close(t->cache_view);
-       mail_index_view_close(&t->trans_view);
+       mail_index_view_close(&t->mailbox_ctx.view);
        array_free(&t->mailbox_ctx.module_contexts);
        i_free(t);
 }
@@ -32,9 +32,9 @@ index_transaction_index_commit(struct mail_index_transaction *index_trans,
 
        i_assert(it->mail_ref_count == 0);
        if (ret < 0)
-               it->super.rollback(it->trans);
+               it->super.rollback(index_trans);
        else {
-               if (it->super.commit(it->trans, result_r) < 0) {
+               if (it->super.commit(index_trans, result_r) < 0) {
                        mail_storage_set_index_error(t->box);
                        ret = -1;
                }
@@ -56,7 +56,7 @@ static void index_transaction_index_rollback(struct mail_index_transaction *t)
        if (it->mailbox_ctx.save_ctx != NULL)
                ibox->save_rollback(it->mailbox_ctx.save_ctx);
 
-       it->super.rollback(it->trans);
+       it->super.rollback(t);
        index_transaction_free(it);
 }
 
@@ -64,6 +64,7 @@ void index_transaction_init(struct index_transaction_context *it,
                            struct mailbox *box,
                            enum mailbox_transaction_flags flags)
 {
+       struct mailbox_transaction_context *t = &it->mailbox_ctx;
        enum mail_index_transaction_flags trans_flags;
 
        i_assert(box->opened);
@@ -76,22 +77,22 @@ void index_transaction_init(struct index_transaction_context *it,
        if ((flags & MAILBOX_TRANSACTION_FLAG_REFRESH) != 0)
                (void)mail_index_refresh(box->index);
 
-       it->trans = mail_index_transaction_begin(box->view, trans_flags);
-       it->mailbox_ctx.box = box;
+       t->box = box;
+       t->itrans = mail_index_transaction_begin(box->view, trans_flags);
+       t->view = mail_index_transaction_open_updated_view(t->itrans);
 
-       array_create(&it->mailbox_ctx.module_contexts, default_pool,
+       array_create(&t->module_contexts, default_pool,
                     sizeof(void *), 5);
 
-       it->trans_view = mail_index_transaction_open_updated_view(it->trans);
-       it->cache_view = mail_cache_view_open(box->cache, it->trans_view);
-       it->cache_trans = mail_cache_get_transaction(it->cache_view, it->trans);
+       it->cache_view = mail_cache_view_open(box->cache, t->view);
+       it->cache_trans = mail_cache_get_transaction(it->cache_view, t->itrans);
 
        /* set up after mail_cache_get_transaction(), so that we'll still
           have the cache_trans available in _index_commit() */
-       it->super = it->trans->v;
-       it->trans->v.commit = index_transaction_index_commit;
-       it->trans->v.rollback = index_transaction_index_rollback;
-       MODULE_CONTEXT_SET(it->trans, mail_storage_mail_index_module, it);
+       it->super = t->itrans->v;
+       t->itrans->v.commit = index_transaction_index_commit;
+       t->itrans->v.rollback = index_transaction_index_rollback;
+       MODULE_CONTEXT_SET(t->itrans, mail_storage_mail_index_module, it);
 }
 
 struct mailbox_transaction_context *
@@ -105,13 +106,11 @@ index_transaction_begin(struct mailbox *box,
        return &it->mailbox_ctx;
 }
 
-int index_transaction_commit(struct mailbox_transaction_context *_t,
+int index_transaction_commit(struct mailbox_transaction_context *t,
                             struct mail_transaction_commit_changes *changes_r)
 {
-       struct index_transaction_context *t =
-               (struct index_transaction_context *)_t;
-       struct mailbox *box = _t->box;
-       struct mail_index_transaction *itrans = t->trans;
+       struct mailbox *box = t->box;
+       struct mail_index_transaction *itrans = t->itrans;
        struct mail_index_transaction_commit_result result;
        int ret;
 
@@ -119,10 +118,10 @@ int index_transaction_commit(struct mailbox_transaction_context *_t,
        changes_r->pool = pool_alloconly_create(MEMPOOL_GROWING
                                                "transaction changes", 512);
        p_array_init(&changes_r->saved_uids, changes_r->pool, 32);
-       _t->changes = changes_r;
+       t->changes = changes_r;
 
        ret = mail_index_transaction_commit_full(&itrans, &result);
-       _t = NULL;
+       t = NULL;
 
        if (ret < 0 && mail_index_is_deleted(box->index))
                mailbox_set_deleted(box);
@@ -135,12 +134,10 @@ int index_transaction_commit(struct mailbox_transaction_context *_t,
        return ret;
 }
 
-void index_transaction_rollback(struct mailbox_transaction_context *_t)
+void index_transaction_rollback(struct mailbox_transaction_context *t)
 {
-       struct index_transaction_context *t =
-               (struct index_transaction_context *)_t;
-       struct mailbox *box = _t->box;
-       struct mail_index_transaction *itrans = t->trans;
+       struct mailbox *box = t->box;
+       struct mail_index_transaction *itrans = t->itrans;
 
        mail_index_transaction_rollback(&itrans);
 
@@ -148,12 +145,9 @@ void index_transaction_rollback(struct mailbox_transaction_context *_t)
                 box->view->transactions == 0);
 }
 
-void index_transaction_set_max_modseq(struct mailbox_transaction_context *_t,
+void index_transaction_set_max_modseq(struct mailbox_transaction_context *t,
                                      uint64_t max_modseq,
                                      ARRAY_TYPE(seq_range) *seqs)
 {
-       struct index_transaction_context *t =
-               (struct index_transaction_context *)_t;
-
-       mail_index_transaction_set_max_modseq(t->trans, max_modseq, seqs);
+       mail_index_transaction_set_max_modseq(t->itrans, max_modseq, seqs);
 }
index 93658c59debf912a07c05366417bc965caf5d4aa..9fed0014f355fe68c66d7e65a5bee43b25ff512e 100644 (file)
@@ -125,7 +125,7 @@ maildir_save_transaction_init(struct mailbox_transaction_context *t)
        ctx->ctx.transaction = t;
        ctx->pool = pool;
        ctx->mbox = mbox;
-       ctx->trans = ((struct index_transaction_context *)t)->trans;
+       ctx->trans = t->itrans;
        ctx->files_tail = &ctx->files;
        ctx->fd = -1;
 
index b760e90d1a6dc30983414466bd9a995f62d90ed1..674b089170a18d414d63e33e68d385d25cad3d37 100644 (file)
@@ -84,7 +84,7 @@ static int mbox_mail_seek(struct index_mail *mail)
                if (mbox_file_open_stream(mbox) < 0)
                        return -1;
 
-               ret = mbox_file_seek(mbox, mail->trans->trans_view,
+               ret = mbox_file_seek(mbox, _mail->transaction->view,
                                     _mail->seq, &deleted);
                if (ret > 0) {
                        /* success */
@@ -157,8 +157,9 @@ mbox_mail_get_md5_header(struct index_mail *mail, const char **value_r)
        if (mail->data.guid != NULL)
                return mail->data.guid;
 
-       mail_index_lookup_ext(mail->trans->trans_view, mail->mail.mail.seq,
-                             mbox->md5hdr_ext_idx, &ext_data, NULL);
+       mail_index_lookup_ext(mail->mail.mail.transaction->view,
+                             mail->mail.mail.seq, mbox->md5hdr_ext_idx,
+                             &ext_data, NULL);
        if (ext_data != NULL && memcmp(ext_data, empty_md5, 16) != 0) {
                mail->data.guid = p_strdup(mail->data_pool,
                                           binary_to_hex(ext_data, 16));
@@ -230,7 +231,7 @@ mbox_mail_get_next_offset(struct index_mail *mail, uoff_t *next_offset_r)
        int trailer_size;
        int ret = 1;
 
-       hdr = mail_index_get_header(mail->trans->trans_view);
+       hdr = mail_index_get_header(mail->mail.mail.transaction->view);
        if (mail->mail.mail.seq > hdr->messages_count) {
                /* we're appending a new message */
                return 0;
index 18a2ce084d7549b09d4221434c33a8dc61a620e8..ce789ef9287c131a9c0b4cb6de195fc1ebf6250a 100644 (file)
@@ -411,8 +411,6 @@ mbox_save_get_input_stream(struct mbox_save_context *ctx, struct istream *input)
 struct mail_save_context *
 mbox_save_alloc(struct mailbox_transaction_context *t)
 {
-       struct mbox_transaction_context *mt =
-               (struct mbox_transaction_context *)t;
        struct mbox_mailbox *mbox = (struct mbox_mailbox *)t->box;
        struct mbox_save_context *ctx;
 
@@ -422,7 +420,7 @@ mbox_save_alloc(struct mailbox_transaction_context *t)
                ctx = i_new(struct mbox_save_context, 1);
                ctx->ctx.transaction = t;
                ctx->mbox = mbox;
-               ctx->trans = mt->ictx.trans;
+               ctx->trans = t->itrans;
                ctx->append_offset = (uoff_t)-1;
                ctx->headers = str_new(default_pool, 512);
                ctx->mail_offset = (uoff_t)-1;
index a9576ea79b0d53a6756ae17f7b5f8f8a0886d81a..8f7c26167e82fa441f40e704835ec006eaf76c29 100644 (file)
@@ -361,6 +361,10 @@ struct mailbox_transaction_context {
        struct mailbox *box;
        enum mailbox_transaction_flags flags;
 
+       struct mail_index_transaction *itrans;
+       /* view contains all changes done within this transaction */
+       struct mail_index_view *view;
+
        struct mail_transaction_commit_changes *changes;
        ARRAY_DEFINE(module_contexts,
                     union mailbox_transaction_module_context *);
index 779c435c6ea731d1e9aa8031717aa37e867279a1..ed63f3196586c1696ec40ec5aae7dd199c39d9de 100644 (file)
@@ -64,17 +64,15 @@ expire_mailbox_transaction_begin(struct mailbox *box,
        return t;
 }
 
-static void first_nonexpunged_timestamp(struct mailbox_transaction_context *_t,
+static void first_nonexpunged_timestamp(struct mailbox_transaction_context *t,
                                        time_t *stamp_r)
 {
-       struct index_transaction_context *t =
-               (struct index_transaction_context *)_t;
-       struct mail_index_view *view = t->trans_view;
+       struct mail_index_view *view = t->view;
        const struct mail_index_header *hdr;
        struct mail *mail;
        uint32_t seq;
 
-       mail = mail_alloc(_t, 0, NULL);
+       mail = mail_alloc(t, 0, NULL);
 
        /* find the first non-expunged mail. we're here because the first
           mail was expunged, so don't bother checking it. */