]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-index: Add missing initialization for chained hooks
authorAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 20 Feb 2017 13:35:02 +0000 (15:35 +0200)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Mon, 20 Feb 2017 15:16:47 +0000 (17:16 +0200)
src/lib-index/mail-index-transaction-private.h
src/lib-index/mail-index-transaction.c

index eb3025668eebe0227a272dfe616b839070d2eb07..53c4ccc8427fb510d2d1d7d4bd35210d0a168b16 100644 (file)
@@ -26,6 +26,7 @@ struct mail_index_transaction_vfuncs {
 };
 
 union mail_index_transaction_module_context {
+       struct mail_index_transaction_vfuncs super;
        struct mail_index_module_register *reg;
 };
 
@@ -40,7 +41,7 @@ struct mail_index_transaction {
        int refcount;
 
        enum mail_index_transaction_flags flags;
-       struct mail_index_transaction_vfuncs v;
+       struct mail_index_transaction_vfuncs v, *vlast;
        struct mail_index_view *view;
        struct mail_index_view *latest_view;
 
index c7441dca5298a58fd814ce792ff5f2393be6f879..ca61b14da1cf730320b7dd056c1f01251b3fb492 100644 (file)
@@ -3,6 +3,7 @@
 #include "lib.h"
 #include "ioloop.h"
 #include "array.h"
+#include "hook-build.h"
 #include "bsearch-insert-pos.h"
 #include "llist.h"
 #include "mail-index-private.h"
@@ -349,10 +350,15 @@ mail_index_transaction_begin(struct mail_index_view *view,
        DLLIST_PREPEND(&view->transactions_list, t);
 
        if (array_is_created(&hook_mail_index_transaction_created)) {
+               struct hook_build_context *ctx =
+                       hook_build_init((void *)&t->v, sizeof(t->v));
                const hook_mail_index_transaction_created_t *const *ptr;
                array_foreach(&hook_mail_index_transaction_created, ptr) {
                        (*ptr)(t);
+                       hook_build_update(ctx, t->vlast);
                }
+               t->vlast = NULL;
+               hook_build_deinit(&ctx);
        }
        return t;
 }