Skip to content

Commit

Permalink
imapsieve plugin: Do not initialize mailbox rules until they are needed.
Browse files Browse the repository at this point in the history
Otherwise, these would be re-parsed every time a new mail_user is created (e.g. when opening a mail as raw).
  • Loading branch information
stephanbosch committed Apr 18, 2016
1 parent 6af702e commit ef25ce6
Showing 1 changed file with 15 additions and 9 deletions.
24 changes: 15 additions & 9 deletions src/plugins/imapsieve/imap-sieve-storage.c
Expand Up @@ -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);

Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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);
}
Expand All @@ -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);
}

/*
Expand Down

0 comments on commit ef25ce6

Please sign in to comment.