From ef25ce69cee80a955491f637ec8e5e8c0d6cb997 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Tue, 19 Apr 2016 00:27:09 +0200 Subject: [PATCH] imapsieve plugin: Do not initialize mailbox rules until they are needed. Otherwise, these would be re-parsed every time a new mail_user is created (e.g. when opening a mail as raw). --- src/plugins/imapsieve/imap-sieve-storage.c | 24 ++++++++++++++-------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/plugins/imapsieve/imap-sieve-storage.c b/src/plugins/imapsieve/imap-sieve-storage.c index b616d8d93..3d74cbf89 100644 --- a/src/plugins/imapsieve/imap-sieve-storage.c +++ b/src/plugins/imapsieve/imap-sieve-storage.c @@ -814,10 +814,18 @@ static void imap_sieve_mailbox_rules_init(struct mail_user *user) { struct imap_sieve_user *isuser = IMAP_SIEVE_USER_CONTEXT(user); - string_t *identifier = t_str_new(256); + string_t *identifier; unsigned int i = 0; size_t prefix_len; + if (hash_table_is_created(isuser->mbox_rules)) + return; + + hash_table_create(&isuser->mbox_rules, default_pool, 0, + imap_sieve_mailbox_rule_hash, imap_sieve_mailbox_rule_cmp); + i_array_init(&isuser->mbox_patterns, 8); + + identifier = t_str_new(256); str_append(identifier, "imapsieve_mailbox"); prefix_len = str_len(identifier); @@ -1026,6 +1034,8 @@ imap_sieve_mailbox_rules_get(struct mail_user *user, { const char *dst_name, *src_name; + imap_sieve_mailbox_rules_init(user); + imap_sieve_mailbox_rules_match_patterns (user, dst_box, src_box, cause, rules); @@ -1056,8 +1066,10 @@ static void imap_sieve_user_deinit(struct mail_user *user) if (isuser->isieve != NULL) imap_sieve_deinit(&isuser->isieve); - hash_table_destroy(&isuser->mbox_rules); - array_free(&isuser->mbox_patterns); + if (hash_table_is_created(isuser->mbox_rules)) + hash_table_destroy(&isuser->mbox_rules); + if (array_is_created(&isuser->mbox_patterns)) + array_free(&isuser->mbox_patterns); isuser->module_ctx.super.deinit(user); } @@ -1072,12 +1084,6 @@ static void imap_sieve_user_created(struct mail_user *user) user->vlast = &isuser->module_ctx.super; v->deinit = imap_sieve_user_deinit; MODULE_CONTEXT_SET(user, imap_sieve_user_module, isuser); - - hash_table_create(&isuser->mbox_rules, default_pool, 0, - imap_sieve_mailbox_rule_hash, imap_sieve_mailbox_rule_cmp); - i_array_init(&isuser->mbox_patterns, 8); - - imap_sieve_mailbox_rules_init(user); } /*