]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: maildir: maildir-save - Move final copying of keywords to a separate...
authorStephan Bosch <stephan.bosch@dovecot.fi>
Fri, 11 Jan 2019 13:16:39 +0000 (14:16 +0100)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 10 May 2019 12:58:07 +0000 (15:58 +0300)
src/lib-storage/index/maildir/maildir-save.c
src/lib-storage/index/maildir/maildir-storage.h

index acb4b33f73792c1ad200ea3bcbfb3cfada6ceea8..372d421a52bfe977729c1afcd08dc5c4c5426883 100644 (file)
@@ -494,6 +494,25 @@ static void maildir_save_remove_last_filename(struct maildir_save_context *ctx)
        ctx->files_count--;
 }
 
+void maildir_save_finish_keywords(struct mail_save_context *_ctx)
+{
+       struct maildir_save_context *ctx = MAILDIR_SAVECTX(_ctx);
+
+       ARRAY_TYPE(keyword_indexes) keyword_idx;
+       t_array_init(&keyword_idx, 8);
+       mail_index_lookup_keywords(ctx->ctx.transaction->view, ctx->seq,
+                                  &keyword_idx);
+
+       if (array_count(&keyword_idx) > 0) {
+               /* copy keywords */
+               p_array_init(&ctx->file_last->keywords, ctx->pool,
+                            array_count(&keyword_idx));
+               array_copy(&ctx->file_last->keywords.arr, 0, &keyword_idx.arr, 0,
+                          array_count(&keyword_idx));
+               ctx->have_keywords = TRUE;
+       }
+}
+
 static int maildir_save_finish_real(struct mail_save_context *_ctx)
 {
        struct maildir_save_context *ctx = MAILDIR_SAVECTX(_ctx);
@@ -548,19 +567,7 @@ static int maildir_save_finish_real(struct mail_save_context *_ctx)
        output_errstr = t_strdup(o_stream_get_error(_ctx->data.output));
        o_stream_destroy(&_ctx->data.output);
 
-       ARRAY_TYPE(keyword_indexes) keyword_idx;
-       t_array_init(&keyword_idx, 8);
-       mail_index_lookup_keywords(ctx->ctx.transaction->view, ctx->seq,
-                                  &keyword_idx);
-
-       if (array_count(&keyword_idx) > 0) {
-               /* copy keywords */
-               p_array_init(&ctx->file_last->keywords, ctx->pool,
-                            array_count(&keyword_idx));
-               array_copy(&ctx->file_last->keywords.arr, 0, &keyword_idx.arr, 0,
-                          array_count(&keyword_idx));
-               ctx->have_keywords = TRUE;
-       }
+       maildir_save_finish_keywords(_ctx);
 
        if (storage->set->parsed_fsync_mode != FSYNC_MODE_NEVER &&
            !ctx->failed) {
index aabb6a362f4ebdd0281a0c6ae019a9d70538f871..913d1323b2e193a6f2b2fd338c979082ccc7d6fe 100644 (file)
@@ -118,6 +118,7 @@ struct mail_save_context *
 maildir_save_alloc(struct mailbox_transaction_context *_t);
 int maildir_save_begin(struct mail_save_context *ctx, struct istream *input);
 int maildir_save_continue(struct mail_save_context *ctx);
+void maildir_save_finish_keywords(struct mail_save_context *ctx);
 int maildir_save_finish(struct mail_save_context *ctx);
 void maildir_save_cancel(struct mail_save_context *ctx);