]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-fts: Call u_clean() at deinit to free up all of libicu's memory.
authorTimo Sirainen <tss@iki.fi>
Mon, 18 May 2015 10:51:24 +0000 (06:51 -0400)
committerTimo Sirainen <tss@iki.fi>
Mon, 18 May 2015 10:51:24 +0000 (06:51 -0400)
src/lib-fts/fts-filter-normalizer-icu.c
src/lib-fts/test-fts-icu.c

index e1704ad928813ddf1f342dbbb4cc5573625207ea..fa10040b0472be43f123221936a729852c092ff2 100644 (file)
@@ -10,6 +10,8 @@
 #ifdef HAVE_LIBICU
 #include "fts-icu.h"
 
+#include <unicode/uclean.h>
+
 struct fts_filter_normalizer_icu {
        struct fts_filter filter;
        pool_t pool;
@@ -22,6 +24,8 @@ struct fts_filter_normalizer_icu {
        string_t *utf8_token;
 };
 
+static bool icu_exit_callback_set = FALSE;
+
 static void fts_filter_normalizer_icu_destroy(struct fts_filter *filter)
 {
        struct fts_filter_normalizer_icu *np =
@@ -54,6 +58,11 @@ fts_filter_normalizer_icu_create(const struct fts_language *lang ATTR_UNUSED,
                }
        }
 
+       if (!icu_exit_callback_set) {
+               icu_exit_callback_set = TRUE;
+               lib_atexit(u_cleanup);
+       }
+
        pp = pool_alloconly_create(MEMPOOL_GROWING"fts_filter_normalizer_icu",
                                   sizeof(struct fts_filter_normalizer_icu));
        np = p_new(pp, struct fts_filter_normalizer_icu, 1);
index 7a1c9a649b3b194479dd81aca7919a4c7577c808..10944913c5425857205f84ae8e02af6c456caddb 100644 (file)
@@ -7,6 +7,8 @@
 #include "test-common.h"
 #include "fts-icu.h"
 
+#include <unicode/uclean.h>
+
 static void test_fts_icu_utf8_to_utf16_ascii_resize(void)
 {
        buffer_t *dest = buffer_create_dynamic(pool_datastack_create(), 5);
@@ -150,5 +152,7 @@ int main(void)
                test_fts_icu_translate_resize,
                NULL
        };
-       return test_run(test_functions);
+       int ret = test_run(test_functions);
+       u_cleanup();
+       return ret;
 }