changeset 18726:d097a9779c37

lib-fts: Call u_clean() at deinit to free up all of libicu's memory.
author Timo Sirainen <tss@iki.fi>
date Mon, 18 May 2015 06:51:24 -0400
parents c2ce65bb1caf
children 713476fa84af
files src/lib-fts/fts-filter-normalizer-icu.c src/lib-fts/test-fts-icu.c
diffstat 2 files changed, 14 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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;
 }