• Sergey Vojtovich's avatar
    Revert THD::THD(skip_global_sys_var_lock) argument · 779fb636
    Sergey Vojtovich authored
    Originally introduced by e972125f to avoid harmless wait for
    LOCK_global_system_variables in a newly created thread, which creation was
    initiated by system variable update.
    
    At the same time it opens dangerous hole, when system variable update
    thread already released LOCK_global_system_variables and ack_receiver
    thread haven't yet completed new THD construction. In this case THD
    constructor goes completely unprotected.
    
    Since ack_receiver.stop() waits for the thread to go down, we have to
    temporarily release LOCK_global_system_variables so that it doesn't
    deadlock with ack_receiver.run(). Unfortunately it breaks atomicity
    of rpl_semi_sync_master_enabled updates and makes them not serialized.
    
    LOCK_rpl_semi_sync_master_enabled was introduced to workaround the above.
    TODO: move ack_receiver start/stop into repl_semisync_master
    enable_master/disable_master under LOCK_binlog protection?
    
    Part of MDEV-14984 - regression in connect performance
    779fb636
mysqld.cc 360 KB