mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Revert THD::THD(skip_global_sys_var_lock) argument
Originally introduced by e972125f1
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
This commit is contained in:
@ -3263,17 +3263,12 @@ public:
|
||||
/**
|
||||
@param id thread identifier
|
||||
@param is_wsrep_applier thread type
|
||||
@param skip_lock instruct whether @c LOCK_global_system_variables
|
||||
is already locked, to not acquire it then.
|
||||
*/
|
||||
THD(my_thread_id id, bool is_wsrep_applier= false, bool skip_lock= false);
|
||||
THD(my_thread_id id, bool is_wsrep_applier= false);
|
||||
|
||||
~THD();
|
||||
/**
|
||||
@param skip_lock instruct whether @c LOCK_global_system_variables
|
||||
is already locked, to not acquire it then.
|
||||
*/
|
||||
void init(bool skip_lock= false);
|
||||
|
||||
void init();
|
||||
/*
|
||||
Initialize memory roots necessary for query processing and (!)
|
||||
pre-allocate memory for it. We can't do that in THD constructor because
|
||||
|
Reference in New Issue
Block a user