• Marc Alff's avatar
    Bug#56324 Race Condition while shutting down MySQL: "PSI_server" · bb04ac97
    Marc Alff authored
    Before this fix, the server could crash during shutdown,
    due to race conditions, that occured when killing the server.
    
    In particular, the performance schema instrumentation handle,
    PSI_server, and the performance schema itself would be cleaned up
    too soon, causing race conditions with a running kill server thread.
    
    The specifics of the race condition found are that:
    the main thread executing "PSI_server= NULL" can cause crashes in
    other threads still running, which are executing
    "if (PSI_server != NULL) PSI_server->xxx()"
    as part of the performance schema instrumentation.
    
    While the bug was reported for the kill server thread,
    in theory the same crash could happen with the signal thread,
    as found by code analysis.
    
    The correct fix would be to only shutdown the performance schema
    and set PSI_server to NULL after every other thread is guaranteed
    to be completed, including the kill_server_thread.
    
    However, due to the existing mysqld server design, this is not the case.
    See in particular bug number 56666.
    
    The work around used to fix this race condition is to simply not
    perform the call to shutdown_performance_schema() when the server exits,
    and to keep the PSI_server pointer unchanged.
    
    This will cause memory leaks to be reported by tools like valgrind,
    but no memory leak actually happen because the process is about to exit().
    
    As a result, the file mysql-test/valgrind.supp has been updated
    to filter out these false positive messages.
    
    This code has been tested with running in a loop the following
    tests in parallel, which have been known to fail with race conditions
    in the past:
    - rpl_change_master
    - binlog_max_extension
    - events_restart
    - rpl_heartbeat_basic
    and no crash of test failure has been seen with the changed code.
    bb04ac97
mysqld.cc 259 KB