dovecot-2.2: lib-fts: Call u_clean() at deinit to free up all of...

dovecot at dovecot.org dovecot at dovecot.org
Mon May 18 10:55:26 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/d097a9779c37
changeset: 18726:d097a9779c37
user:      Timo Sirainen <tss at iki.fi>
date:      Mon May 18 06:51:24 2015 -0400
description:
lib-fts: Call u_clean() at deinit to free up all of libicu's memory.

diffstat:

 src/lib-fts/fts-filter-normalizer-icu.c |  9 +++++++++
 src/lib-fts/test-fts-icu.c              |  6 +++++-
 2 files changed, 14 insertions(+), 1 deletions(-)

diffs (54 lines):

diff -r c2ce65bb1caf -r d097a9779c37 src/lib-fts/fts-filter-normalizer-icu.c
--- a/src/lib-fts/fts-filter-normalizer-icu.c	Mon May 18 06:46:32 2015 -0400
+++ b/src/lib-fts/fts-filter-normalizer-icu.c	Mon May 18 06:51:24 2015 -0400
@@ -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 @@
 	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 @@
 		}
 	}
 
+	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);
diff -r c2ce65bb1caf -r d097a9779c37 src/lib-fts/test-fts-icu.c
--- a/src/lib-fts/test-fts-icu.c	Mon May 18 06:46:32 2015 -0400
+++ b/src/lib-fts/test-fts-icu.c	Mon May 18 06:51:24 2015 -0400
@@ -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 @@
 		test_fts_icu_translate_resize,
 		NULL
 	};
-	return test_run(test_functions);
+	int ret = test_run(test_functions);
+	u_cleanup();
+	return ret;
 }


More information about the dovecot-cvs mailing list