• Vladislav Vaintroub's avatar
    Bug#38522: 5 seconds delay when closing application using embedded server · 4dfbf2ec
    Vladislav Vaintroub authored
                      
    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
    
    4dfbf2ec
dbug.c 61.5 KB