Mercurial > dovecot > core-2.2
changeset 21489:3309fe3ea47b
lib-storage: Don't duplicate service user's settings into mail_user
The mail_storage_service_user.user_set isn't used afterwards, so it can be
directly used to avoid wasting memory.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Sat, 04 Feb 2017 13:51:13 +0200 |
parents | e97bc5dcf420 |
children | a2cca53d71d2 |
files | src/lib-storage/mail-storage-service.c src/lib-storage/mail-user.c src/lib-storage/mail-user.h |
diffstat | 3 files changed, 34 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/mail-storage-service.c Sat Feb 04 13:38:17 2017 +0200 +++ b/src/lib-storage/mail-storage-service.c Sat Feb 04 13:51:13 2017 +0200 @@ -647,8 +647,8 @@ /* NOTE: if more user initialization is added, add it also to mail_user_dup() */ - mail_user = mail_user_alloc(user->input.username, user->user_info, - user->user_set); + mail_user = mail_user_alloc_nodup_set(user->input.username, + user->user_info, user->user_set); mail_user->_service_user = user; mail_user_set_home(mail_user, *home == '\0' ? NULL : home); mail_user_set_vars(mail_user, ctx->service->name, @@ -730,6 +730,7 @@ return -1; } } + *mail_user_r = mail_user; return 0; }
--- a/src/lib-storage/mail-user.c Sat Feb 04 13:38:17 2017 +0200 +++ b/src/lib-storage/mail-user.c Sat Feb 04 13:51:13 2017 +0200 @@ -43,24 +43,23 @@ { } -struct mail_user *mail_user_alloc(const char *username, - const struct setting_parser_info *set_info, - const struct mail_user_settings *set) +static struct mail_user * +mail_user_alloc_int(const char *username, + const struct setting_parser_info *set_info, + const struct mail_user_settings *set, pool_t pool) { struct mail_user *user; const char *error; - pool_t pool; i_assert(username != NULL); i_assert(*username != '\0'); - pool = pool_alloconly_create(MEMPOOL_GROWING"mail user", 16*1024); user = p_new(pool, struct mail_user, 1); user->pool = pool; user->refcount = 1; user->username = p_strdup(pool, username); user->set_info = set_info; - user->unexpanded_set = settings_dup(set_info, set, pool); + user->unexpanded_set = set; user->set = settings_dup_with_pointers(set_info, user->unexpanded_set, pool); user->service = master_service_get_name(master_service); user->default_normalizer = uni_utf8_to_decomposed_titlecase; @@ -77,6 +76,28 @@ return user; } +struct mail_user * +mail_user_alloc_nodup_set(const char *username, + const struct setting_parser_info *set_info, + const struct mail_user_settings *set) +{ + pool_t pool; + + pool = pool_alloconly_create(MEMPOOL_GROWING"mail user", 16*1024); + return mail_user_alloc_int(username, set_info, set, pool); +} + +struct mail_user *mail_user_alloc(const char *username, + const struct setting_parser_info *set_info, + const struct mail_user_settings *set) +{ + pool_t pool; + + pool = pool_alloconly_create(MEMPOOL_GROWING"mail user", 16*1024); + return mail_user_alloc_int(username, set_info, + settings_dup(set_info, set, pool), pool); +} + static void mail_user_expand_plugins_envs(struct mail_user *user) {
--- a/src/lib-storage/mail-user.h Sat Feb 04 13:38:17 2017 +0200 +++ b/src/lib-storage/mail-user.h Sat Feb 04 13:51:13 2017 +0200 @@ -116,6 +116,10 @@ struct mail_user *mail_user_alloc(const char *username, const struct setting_parser_info *set_info, const struct mail_user_settings *set); +struct mail_user * +mail_user_alloc_nodup_set(const char *username, + const struct setting_parser_info *set_info, + const struct mail_user_settings *set); /* Returns -1 if settings were invalid. */ int mail_user_init(struct mail_user *user, const char **error_r);