mariadb/mysys
Vladislav Vaintroub 4dfbf2ec93 Bug#38522: 5 seconds delay when closing application using embedded server
The problem here is that embedded server starts handle_thread manager 
thread  on mysql_library_init() does not stop it on mysql_library_end().
At shutdown, my_thread_global_end() waits for thread count to become 0,
but since we did not stop the thread it will give up after 5 seconds.
             
Solution is to move shutdown for handle_manager thread from kill_server()
(mysqld specific) to clean_up() that is used by both embedded and mysqld.
            
This patch also contains some refactorings - to avoid duplicate code,
start_handle_manager() and stop_handle_manager() functions are introduced.
Unused variables are eliminated. handle_manager does not rely on global
variable abort_loop anymore to stop (abort_loop is not set for embedded).
            
Note: Specifically on Windows and when using DBUG version of libmysqld, 
the complete solution requires removing obsolete code my_thread_init() 
from my_thread_var(). This has a side effect that a DBUG statement 
after my_thread_end() can cause thread counter to be incremented, and 
embedded will hang for some seconds. Or worse, my_thread_init() will 
crash if critical sections have been deleted by the global cleanup 
routine that runs in a different thread. 

This patch also fixes and revert prior changes for Bug#38293 
"Libmysqld crash in mysql_library_init if language file missing".

Root cause of the crash observed in Bug#38293  was bug in my_thread_init() 
described above
2008-12-04 19:41:53 +01:00
..
.cvsignore
array.c
base64.c
ChangeLog
charset-def.c
charset.c
checksum.c
CMakeLists.txt
default.c
default_modify.c
errors.c
hash.c
list.c
make-ccc
make-conf.c
Makefile.am
md5.c
mf_arr_appstr.c
mf_brkhant.c
mf_cache.c
mf_dirname.c
mf_fn_ext.c
mf_format.c
mf_getdate.c
mf_iocache.c
mf_iocache2.c
mf_keycache.c
mf_keycaches.c
mf_loadpath.c
mf_pack.c
mf_path.c
mf_qsort.c
mf_qsort2.c
mf_radix.c
mf_same.c
mf_sort.c
mf_soundex.c
mf_strip.c
mf_tempdir.c
mf_tempfile.c
mf_unixpath.c
mf_util.c
mf_wcomp.c
mf_wfile.c
mulalloc.c
my_access.c
my_aes.c
my_alarm.c
my_alloc.c
my_append.c
my_atomic.c
my_bit.c
my_bitmap.c
my_chsize.c
my_clock.c
my_compress.c
my_conio.c
my_copy.c
my_crc32.c
my_create.c
my_delete.c
my_div.c
my_dup.c
my_error.c
my_file.c
my_fopen.c
my_fstream.c
my_gethostbyname.c
my_gethwaddr.c
my_getncpus.c
my_getopt.c
my_getpagesize.c
my_getsystime.c
my_getwd.c
my_handler.c
my_handler_errors.h
my_init.c
my_largepage.c
my_lib.c
my_libwrap.c
my_lock.c
my_lockmem.c
my_malloc.c
my_memmem.c
my_messnc.c
my_mkdir.c
my_mmap.c
my_net.c
my_netware.c
my_new.cc
my_once.c
my_open.c
my_port.c
my_pread.c
my_pthread.c
my_quick.c
my_read.c
my_realloc.c
my_redel.c
my_rename.c
my_seek.c
my_sleep.c
my_static.c
my_static.h
my_symlink.c
my_symlink2.c
my_sync.c
my_thr_init.c
my_vle.c
my_wincond.c
my_windac.c
my_winthread.c
my_write.c
mysys_priv.h
ptr_cmp.c
queues.c
rijndael.c
safemalloc.c
sha1.c
stacktrace.c
string.c
test_charset.c
test_dir.c
test_fn.c
test_xml.c
testhash.c
thr_alarm.c
thr_lock.c
thr_mutex.c
thr_rwlock.c
tree.c
trie.c
typelib.c