]> 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)
committerGitLab <gitlab@git.dovecot.net>
Mon, 6 Feb 2017 08:21:46 +0000 (10:21 +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 c74543957ba70d594fb0664ae835d9f58b63b733..857224d7541f15749157a1c630fba79f3481badb 100644 (file)
@@ -658,8 +658,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,
@@ -741,6 +741,7 @@ mail_storage_service_init_post(struct mail_storage_service_ctx *ctx,
                        return -1;
                }
        }
+
        *mail_user_r = mail_user;
        return 0;
 }
index 16a72ae9f5fc07de9cad380314bc68add24f3737..4a029303460eee8c0cff01826c044b7c2e6b06bd 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 8ae20ea225ce60f7ffaf3af8ad258e1393518b82..7b0bd45598512feacebde021135955151950caeb 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);