Skip to content

Commit 8173799

Browse files
author
Joao Gramacho
committed
WL#9556 Writeset-based MTS dependency tracking on master
UBSAN was complaining about a possible “static initialization order fiasco” between: in sys_vars.cc: - static PolyLock_mutex PLock_log(mysql_bin_log.get_log_lock()); in binlog.cc: - MYSQL_BIN_LOG mysql_bin_log(&sync_binlog_period, WRITE_CACHE); The fix creates a new PolyLock type to handle only the mysql_bin_log LOCK_log.
1 parent 983a6d9 commit 8173799

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

sql/sys_vars.cc

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3618,7 +3618,22 @@ static bool update_binlog_transaction_dependency_tracking(sys_var*, THD*, enum_v
36183618
return false;
36193619
}
36203620

3621-
static PolyLock_mutex PLock_log(mysql_bin_log.get_log_lock());
3621+
void PolyLock_lock_log::rdlock()
3622+
{
3623+
mysql_mutex_lock(mysql_bin_log.get_log_lock());
3624+
}
3625+
3626+
void PolyLock_lock_log::wrlock()
3627+
{
3628+
mysql_mutex_lock(mysql_bin_log.get_log_lock());
3629+
}
3630+
3631+
void PolyLock_lock_log::unlock()
3632+
{
3633+
mysql_mutex_unlock(mysql_bin_log.get_log_lock());
3634+
}
3635+
3636+
static PolyLock_lock_log PLock_log;
36223637
static const char *opt_binlog_transaction_dependency_tracking_names[]=
36233638
{"COMMIT_ORDER", "WRITESET", "WRITESET_SESSION", NullS};
36243639
static Sys_var_enum Binlog_transaction_dependency_tracking(

sql/sys_vars_shared.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,14 @@ class PolyLock_rwlock: public PolyLock
6767
void unlock() { mysql_rwlock_unlock(rwlock); }
6868
};
6969

70+
class PolyLock_lock_log: public PolyLock
71+
{
72+
public:
73+
void rdlock();
74+
void wrlock();
75+
void unlock();
76+
};
77+
7078
class AutoWLock
7179
{
7280
PolyLock *lock;

0 commit comments

Comments
 (0)