summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/my_sys.h2
-rw-r--r--libmysql/libmysql.c1
-rw-r--r--mysys/charset.c5
-rw-r--r--mysys/my_init.c1
-rw-r--r--sql/mysqld.cc1
5 files changed, 9 insertions, 1 deletions
diff --git a/include/my_sys.h b/include/my_sys.h
index a4ff5c30de7..59b44307b6f 100644
--- a/include/my_sys.h
+++ b/include/my_sys.h
@@ -950,7 +950,7 @@ extern my_bool resolve_charset(const char *cs_name,
extern my_bool resolve_collation(const char *cl_name,
CHARSET_INFO *default_cl,
CHARSET_INFO **cl);
-
+extern void free_charsets(void);
extern char *get_charsets_dir(char *buf);
extern my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2);
extern my_bool init_compiled_charsets(myf flags);
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index f626361536f..6ea777a0702 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -211,6 +211,7 @@ void STDCALL mysql_server_end()
}
else
{
+ free_charsets();
mysql_thread_end();
}
diff --git a/mysys/charset.c b/mysys/charset.c
index b1b91d716ba..584b33b2d6a 100644
--- a/mysys/charset.c
+++ b/mysys/charset.c
@@ -427,6 +427,11 @@ static void init_available_charsets(void)
}
+void free_charsets(void)
+{
+ charsets_initialized= MY_PTHREAD_ONCE_INIT;
+}
+
uint get_collation_number(const char *name)
{
my_pthread_once(&charsets_initialized, init_available_charsets);
diff --git a/mysys/my_init.c b/mysys/my_init.c
index 453c72f999f..a60927be693 100644
--- a/mysys/my_init.c
+++ b/mysys/my_init.c
@@ -165,6 +165,7 @@ void my_end(int infoflag)
my_print_open_files();
}
}
+ free_charsets();
my_error_unregister_all();
my_once_free();
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index a483b9e2381..122fadf9847 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -1287,6 +1287,7 @@ void clean_up(bool print_message)
lex_free(); /* Free some memory */
item_create_cleanup();
set_var_free();
+ free_charsets();
if (!opt_noacl)
{
#ifdef HAVE_DLOPEN