]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: lang_user_init() - Add event parameter
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 18 Mar 2024 19:57:29 +0000 (21:57 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:12 +0000 (12:34 +0200)
src/lib-storage/lang-user.c
src/lib-storage/lang-user.h
src/plugins/fts/fts-user.c

index b37f8866bc4b42131fc8e6ea409154bb721f607d..ea5b14c6b9bdea5fa5b007548aa0fb4ebc838f1a 100644 (file)
@@ -21,6 +21,7 @@ struct lang_user {
        const struct langs_settings *set;
        int refcount;
 
+       struct event *event;
        struct language_list *lang_list;
        struct language_user *data_lang;
        ARRAY_TYPE(language_user) languages, data_languages;
@@ -74,7 +75,7 @@ static int
 lang_user_create_filters(struct mail_user *user, const struct language *lang,
                         struct lang_filter **filter_r, const char **error_r)
 {
-
+       struct lang_user *luser = LANG_USER_CONTEXT_REQUIRE(user);
        const struct lang_settings *set = lang_user_settings_get(user, lang->name);
        if (array_is_empty(&set->filters)) {
                /* No filters */
@@ -98,7 +99,7 @@ lang_user_create_filters(struct mail_user *user, const struct language *lang,
                }
 
                const char *error;
-               struct event *event = event_create(user->event);
+               struct event *event = event_create(luser->event);
                event_add_str(event, "language", lang->name);
                ret = lang_filter_create(entry_class, parent, set, event,
                                         &filter, &error);
@@ -127,6 +128,7 @@ lang_user_create_tokenizer(struct mail_user *user, const struct language *lang,
                           struct lang_tokenizer **tokenizer_r, bool search,
                           const char **error_r)
 {
+       struct lang_user *luser = LANG_USER_CONTEXT_REQUIRE(user);
        const struct lang_settings *set = lang_user_settings_get(user, lang->name);
        if (array_is_empty(&set->tokenizers)) {
                /* No tokenizers */
@@ -150,7 +152,7 @@ lang_user_create_tokenizer(struct mail_user *user, const struct language *lang,
                }
 
                const char *error;
-               struct event *event = event_create(user->event);
+               struct event *event = event_create(luser->event);
                event_add_str(event, "language", set->name);
                ret = lang_tokenizer_create(entry_class, parent, set, event,
                                            search ? LANG_TOKENIZER_FLAG_SEARCH : 0,
@@ -255,7 +257,7 @@ lang_user_init_data_language(struct mail_user *user, struct lang_user *luser,
        if (lang_user_language_init_tokenizers(user, user_lang, error_r) < 0)
                return -1;
 
-       struct event *event = event_create(user->event);
+       struct event *event = event_create(luser->event);
        event_add_str(event, "language", language_data.name);
        if (lang_filter_create(lang_filter_lowercase, NULL, set, event,
                               &user_lang->filter, &error) < 0)
@@ -329,6 +331,7 @@ static void lang_user_free(struct lang_user *luser)
        }
 
        settings_free(luser->set);
+       event_unref(&luser->event);
 }
 
 static int
@@ -344,8 +347,8 @@ lang_user_init_libfts(struct mail_user *user, struct lang_user *luser,
        return 0;
 }
 
-int lang_user_init(struct mail_user *user, bool initialize_libfts,
-                  const char **error_r)
+int lang_user_init(struct mail_user *user, struct event *event,
+                  bool initialize_libfts, const char **error_r)
 {
        struct lang_user *luser = LANG_USER_CONTEXT(user);
 
@@ -356,12 +359,14 @@ int lang_user_init(struct mail_user *user, bool initialize_libfts,
        }
 
        const struct langs_settings *set;
-       if (settings_get(user->event, &langs_setting_parser_info, 0, &set, error_r) < 0)
+       if (settings_get(event, &langs_setting_parser_info, 0, &set, error_r) < 0)
                return -1;
 
        luser = p_new(user->pool, struct lang_user, 1);
        luser->set = set;
        luser->refcount = 1;
+       luser->event = event;
+       event_ref(luser->event);
 
        MODULE_CONTEXT_SET(user, lang_user_module, luser);
        if (initialize_libfts) {
index 7618033ce4b412a233295fecb82457216eac054e..3282efd8b2a7516b3759ae62e802abbc13fe3356 100644 (file)
@@ -21,8 +21,8 @@ lang_user_get_data_languages(struct mail_user *user);
 
 const struct langs_settings *lang_user_get_settings(struct mail_user *user);
 
-int lang_user_init(struct mail_user *user, bool initialize_libfts,
-                      const char **error_r);
+int lang_user_init(struct mail_user *user, struct event *event,
+                  bool initialize_libfts, const char **error_r);
 void lang_user_deinit(struct mail_user *user);
 
 #endif
index e50ba5055a82d419ac0e483480f9c1f5747be082..756bc74b30f614bf92f3186e26649c59941c09fb 100644 (file)
@@ -63,7 +63,7 @@ int fts_mail_user_init(struct mail_user *user, bool initialize_libfts,
        if (settings_get(user->event, &fts_setting_parser_info, 0, &set, error_r) < 0)
                return -1;
 
-       if (lang_user_init(user, initialize_libfts, error_r) < 0) {
+       if (lang_user_init(user, user->event, initialize_libfts, error_r) < 0) {
                settings_free(set);
                return -1;
        }