• Vladislav Vaintroub's avatar
    MDEV-33075 Resolve server shutdown issues on macOS, Solaris, and FreeBSD · 2f5174e5
    Vladislav Vaintroub authored
    This commit addresses multiple server shutdown problems observed on macOS,
    Solaris, and FreeBSD:
    
    1. Corrected a non-portable assumption where socket shutdown was expected
    to wake up poll() with listening sockets in the main thread.
    
    Use more robust self-pipe to wake up poll() by writing to the pipe's write
    end.
    
    2. Fixed a random crash on macOS from pthread_kill(signal_handler)
    when the signal_handler was detached and the thread had already exited.
    
    Use more robust `kill(getpid(), SIGTERM)` to wake up the signal handler
    thread.
    
    3. Made sure, that signal handler thread always exits once `abort_loop` is
    set, and also calls `my_thread_end()` and clears `signal_thread_in_use`
    when exiting.
    
    This fixes warning "1 thread did not exit"  by `my_global_thread_end()`
    seen on FreeBSD/macOS when the process is terminated via signal.
    
    Additionally, the shutdown code underwent light refactoring
    for better readability and maintainability:
    - Modified `break_connect_loop()` to no longer wait for the main thread,
      aligning behavior with Windows (since 10.4).
    - Removed dead code related to the unused `USE_ONE_SIGNAL_HAND`
      preprocessor constant.
    - Eliminated support for `#ifndef HAVE_POLL` in `handle_connection_sockets`
      This code is also dead, since 10.4
    2f5174e5
mysqld.cc 342 KB