diff options
-rw-r--r-- | include/my_sys.h | 2 | ||||
-rw-r--r-- | libmysql/libmysql.c | 1 | ||||
-rw-r--r-- | mysys/charset.c | 5 | ||||
-rw-r--r-- | mysys/my_init.c | 1 | ||||
-rw-r--r-- | sql/mysqld.cc | 1 |
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 |