From: Siavash Tavakoli Date: Wed, 31 Mar 2021 15:01:02 +0000 (+0100) Subject: lib-storage: Refactor index_mail_init() to make it more reusable X-Git-Tag: 2.3.15~87 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3fe38329a9a26c7bad099f0c7d80a8896854d5bd;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Refactor index_mail_init() to make it more reusable Adds arguments for two memory pools, to be set for mail.pool and mail.data_pool. If data_pool is NULL, a pool is allocated but mail_pool is required. --- diff --git a/src/lib-storage/index/dbox-common/dbox-mail.c b/src/lib-storage/index/dbox-common/dbox-mail.c index 25955d8a34..49279f9436 100644 --- a/src/lib-storage/index/dbox-common/dbox-mail.c +++ b/src/lib-storage/index/dbox-common/dbox-mail.c @@ -22,9 +22,8 @@ dbox_mail_alloc(struct mailbox_transaction_context *t, pool = pool_alloconly_create("mail", 2048); mail = p_new(pool, struct dbox_mail, 1); - mail->imail.mail.pool = pool; - index_mail_init(&mail->imail, t, wanted_fields, wanted_headers); + index_mail_init(&mail->imail, t, wanted_fields, wanted_headers, pool, NULL); return &mail->imail.mail.mail; } diff --git a/src/lib-storage/index/imapc/imapc-mail.c b/src/lib-storage/index/imapc/imapc-mail.c index af8bc17f7d..1ecf03e3a3 100644 --- a/src/lib-storage/index/imapc/imapc-mail.c +++ b/src/lib-storage/index/imapc/imapc-mail.c @@ -23,10 +23,9 @@ imapc_mail_alloc(struct mailbox_transaction_context *t, pool = pool_alloconly_create("mail", 2048); mail = p_new(pool, struct imapc_mail, 1); - mail->imail.mail.pool = pool; mail->fd = -1; - index_mail_init(&mail->imail, t, wanted_fields, wanted_headers); + index_mail_init(&mail->imail, t, wanted_fields, wanted_headers, pool, NULL); return &mail->imail.mail.mail; } diff --git a/src/lib-storage/index/index-mail.c b/src/lib-storage/index/index-mail.c index f92482e9ae..7e1a6f3dd1 100644 --- a/src/lib-storage/index/index-mail.c +++ b/src/lib-storage/index/index-mail.c @@ -1688,9 +1688,8 @@ index_mail_alloc(struct mailbox_transaction_context *t, pool = pool_alloconly_create("mail", 2048); mail = p_new(pool, struct index_mail, 1); - mail->mail.pool = pool; - index_mail_init(mail, t, wanted_fields, wanted_headers); + index_mail_init(mail, t, wanted_fields, wanted_headers, pool, NULL); return &mail->mail.mail; } @@ -1703,8 +1702,11 @@ static void index_mail_init_event(struct mail *mail) void index_mail_init(struct index_mail *mail, struct mailbox_transaction_context *t, enum mail_fetch_field wanted_fields, - struct mailbox_header_lookup_ctx *wanted_headers) + struct mailbox_header_lookup_ctx *wanted_headers, + struct pool *mail_pool, + struct pool *data_pool) { + mail->mail.pool = mail_pool; array_create(&mail->mail.module_contexts, mail->mail.pool, sizeof(void *), 5); @@ -1713,7 +1715,10 @@ void index_mail_init(struct index_mail *mail, mail->mail.mail.transaction = t; index_mail_init_event(&mail->mail.mail); t->mail_ref_count++; - mail->mail.data_pool = pool_alloconly_create("index_mail", 16384); + if (data_pool != NULL) + mail->mail.data_pool = data_pool; + else + mail->mail.data_pool = pool_alloconly_create("index_mail", 16384); mail->ibox = INDEX_STORAGE_CONTEXT(t->box); mail->mail.wanted_fields = wanted_fields; if (wanted_headers != NULL) { diff --git a/src/lib-storage/index/index-mail.h b/src/lib-storage/index/index-mail.h index 3705cfd656..88480ee35c 100644 --- a/src/lib-storage/index/index-mail.h +++ b/src/lib-storage/index/index-mail.h @@ -168,7 +168,9 @@ index_mail_alloc(struct mailbox_transaction_context *t, void index_mail_init(struct index_mail *mail, struct mailbox_transaction_context *_t, enum mail_fetch_field wanted_fields, - struct mailbox_header_lookup_ctx *_wanted_headers); + struct mailbox_header_lookup_ctx *_wanted_headers, + struct pool *mail_pool, + struct pool *data_pool); void index_mail_set_seq(struct mail *mail, uint32_t seq, bool saving); bool index_mail_set_uid(struct mail *mail, uint32_t uid); diff --git a/src/lib-storage/index/pop3c/pop3c-mail.c b/src/lib-storage/index/pop3c/pop3c-mail.c index 860becb1e3..c1cbe005a1 100644 --- a/src/lib-storage/index/pop3c/pop3c-mail.c +++ b/src/lib-storage/index/pop3c/pop3c-mail.c @@ -18,9 +18,8 @@ pop3c_mail_alloc(struct mailbox_transaction_context *t, pool = pool_alloconly_create("mail", 2048); mail = p_new(pool, struct pop3c_mail, 1); - mail->imail.mail.pool = pool; - index_mail_init(&mail->imail, t, wanted_fields, wanted_headers); + index_mail_init(&mail->imail, t, wanted_fields, wanted_headers, pool, NULL); return &mail->imail.mail.mail; }