mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 10:31:54 +01:00
Bug#14234028 - CRASH DURING SHUTDOWN WITH BACKGROUND PURGE THREAD
Analysis --------- my_stat() calls stat() and if the stat() call fails we try to set the variable my_errno which is actually a thread specific data . We try to get the address of this thread specific data using my_pthread_getspecifc(),but for the purge thread we have not defined any thread specific data so it returns null and when dereferencing null we get a segmentation fault. init_available_charsets() seen in the core stack is invoked through pthread_once() .pthread_once is used for one time initialization.Since free_charsets() is called before innodb plugin shutdown ,purge thread calls init_avaliable_charsets() which leads to the crash. Fix --- Call free_charsets() after the innodb plugin shutdown,since purge threads are still using the charsets.
This commit is contained in:
parent
078d7a87c9
commit
7a8c93e6dd
1 changed files with 1 additions and 1 deletions
|
@ -1340,7 +1340,6 @@ void clean_up(bool print_message)
|
||||||
lex_free(); /* Free some memory */
|
lex_free(); /* Free some memory */
|
||||||
item_create_cleanup();
|
item_create_cleanup();
|
||||||
set_var_free();
|
set_var_free();
|
||||||
free_charsets();
|
|
||||||
if (!opt_noacl)
|
if (!opt_noacl)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_DLOPEN
|
#ifdef HAVE_DLOPEN
|
||||||
|
@ -1390,6 +1389,7 @@ void clean_up(bool print_message)
|
||||||
#ifdef USE_REGEX
|
#ifdef USE_REGEX
|
||||||
my_regex_end();
|
my_regex_end();
|
||||||
#endif
|
#endif
|
||||||
|
free_charsets();
|
||||||
#if defined(ENABLED_DEBUG_SYNC)
|
#if defined(ENABLED_DEBUG_SYNC)
|
||||||
/* End the debug sync facility. See debug_sync.cc. */
|
/* End the debug sync facility. See debug_sync.cc. */
|
||||||
debug_sync_end();
|
debug_sync_end();
|
||||||
|
|
Loading…
Add table
Reference in a new issue