Commit 29d08621 authored by Aditya A's avatar Aditya A

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. 
parents c4be4dc0 7a8c93e6
...@@ -1476,7 +1476,6 @@ void clean_up(bool print_message) ...@@ -1476,7 +1476,6 @@ void clean_up(bool print_message)
item_user_lock_free(); item_user_lock_free();
lex_free(); /* Free some memory */ lex_free(); /* Free some memory */
item_create_cleanup(); item_create_cleanup();
free_charsets();
if (!opt_noacl) if (!opt_noacl)
{ {
#ifdef HAVE_DLOPEN #ifdef HAVE_DLOPEN
...@@ -1532,6 +1531,7 @@ void clean_up(bool print_message) ...@@ -1532,6 +1531,7 @@ void clean_up(bool print_message)
logger.cleanup_end(); logger.cleanup_end();
my_atomic_rwlock_destroy(&global_query_id_lock); my_atomic_rwlock_destroy(&global_query_id_lock);
my_atomic_rwlock_destroy(&thread_running_lock); my_atomic_rwlock_destroy(&thread_running_lock);
free_charsets();
mysql_mutex_lock(&LOCK_thread_count); mysql_mutex_lock(&LOCK_thread_count);
DBUG_PRINT("quit", ("got thread count lock")); DBUG_PRINT("quit", ("got thread count lock"));
ready_to_exit=1; ready_to_exit=1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment