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:
commit
e3a05ca8e0
@ -1476,7 +1476,6 @@ void clean_up(bool print_message)
|
||||
item_user_lock_free();
|
||||
lex_free(); /* Free some memory */
|
||||
item_create_cleanup();
|
||||
free_charsets();
|
||||
if (!opt_noacl)
|
||||
{
|
||||
#ifdef HAVE_DLOPEN
|
||||
@ -1532,6 +1531,7 @@ void clean_up(bool print_message)
|
||||
logger.cleanup_end();
|
||||
my_atomic_rwlock_destroy(&global_query_id_lock);
|
||||
my_atomic_rwlock_destroy(&thread_running_lock);
|
||||
free_charsets();
|
||||
mysql_mutex_lock(&LOCK_thread_count);
|
||||
DBUG_PRINT("quit", ("got thread count lock"));
|
||||
ready_to_exit=1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user