]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Don't duplicate service user's settings into mail_user
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Sat, 4 Feb 2017 11:51:13 +0000 (13:51 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 6 Feb 2017 14:37:10 +0000 (16:37 +0200)
The mail_storage_service_user.user_set isn't used afterwards, so it can be
directly used to avoid wasting memory.

src/lib-storage/mail-storage-service.c
src/lib-storage/mail-user.c
src/lib-storage/mail-user.h

index 75a6565a7810e57971137cc1e566e5d02f5790ac..6b12cf27af1e634944143e6826e05f36e25d563d 100644 (file)
@@ -647,8 +647,8 @@ mail_storage_service_init_post(struct mail_storage_service_ctx *ctx,
 
        /* 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 @@ mail_storage_service_init_post(struct mail_storage_service_ctx *ctx,
                        return -1;
                }
        }
+
        *mail_user_r = mail_user;
        return 0;
 }
index 678abc166daf968cc71832d542bce1ba9ce008f1..2a99c96d2b4c30a9a1d74d2ef6bfd2185ea33164 100644 (file)
@@ -43,24 +43,23 @@ static void mail_user_stats_fill_base(struct mail_user *user ATTR_UNUSED,
 {
 }
 
-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 @@ struct mail_user *mail_user_alloc(const char *username,
        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)
 {
index de6950389544e5494c905c2a1ef138f437df2450..f7dd6d773c42ab736472cd7afca04556d4d94260 100644 (file)
@@ -116,6 +116,10 @@ extern const struct var_expand_func_table *mail_user_var_expand_func_table;
 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);