diff options
author | Jan Lindström <jan.lindstrom@mariadb.com> | 2021-01-09 09:03:39 +0200 |
---|---|---|
committer | Jan Lindström <jan.lindstrom@mariadb.com> | 2021-01-09 09:03:39 +0200 |
commit | 49b87749513fd931eb874d4559b34ed6aeec8f05 (patch) | |
tree | a3091e3fbc57696abb2dea962e57c795c1535a58 | |
parent | fae87e0c74a02cebcafe69c3546a82da2ec1611d (diff) | |
download | mariadb-git-49b87749513fd931eb874d4559b34ed6aeec8f05.tar.gz |
MDEV-24546 : AddressSanitizer: initialization-order-fiasco on address ... in Sys_var_integer from __static_initialization_and_destruction_0, possibly inside global var wsrep_gtid_server
Galera parameter wsrep_gtid_domain_id was defined using a class where
actual parameter was not a first member. Fixed this by using normal
variable and assigning this value to class member value.
-rw-r--r-- | sql/sys_vars.cc | 6 | ||||
-rw-r--r-- | sql/wsrep_mysqld.cc | 1 | ||||
-rw-r--r-- | sql/wsrep_mysqld.h | 1 | ||||
-rw-r--r-- | sql/wsrep_var.cc | 8 | ||||
-rw-r--r-- | sql/wsrep_var.h | 1 |
5 files changed, 15 insertions, 2 deletions
diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 44d29c5da0b..12b6ea96182 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -6051,8 +6051,10 @@ static Sys_var_uint Sys_wsrep_gtid_domain_id( "wsrep_gtid_domain_id", "When wsrep_gtid_mode is set, this value is " "used as gtid_domain_id for galera transactions and also copied to the " "joiner nodes during state transfer. It is ignored, otherwise.", - GLOBAL_VAR(wsrep_gtid_server.domain_id), CMD_LINE(REQUIRED_ARG), - VALID_RANGE(0, UINT_MAX32), DEFAULT(0), BLOCK_SIZE(1)); + GLOBAL_VAR(wsrep_gtid_domain_id), CMD_LINE(REQUIRED_ARG), + VALID_RANGE(0, UINT_MAX32), DEFAULT(0), BLOCK_SIZE(1), + NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), + ON_UPDATE(wsrep_gtid_domain_id_update)); static Sys_var_ulonglong Sys_wsrep_gtid_seq_no( "wsrep_gtid_seq_no", diff --git a/sql/wsrep_mysqld.cc b/sql/wsrep_mysqld.cc index 50650280a2a..a52533f7efe 100644 --- a/sql/wsrep_mysqld.cc +++ b/sql/wsrep_mysqld.cc @@ -110,6 +110,7 @@ ulong wsrep_mysql_replication_bundle; bool wsrep_gtid_mode; // Enable WSREP native GTID support Wsrep_gtid_server wsrep_gtid_server; +uint wsrep_gtid_domain_id=0; // Domain id on above structure /* Other configuration variables and their default values. */ my_bool wsrep_incremental_data_collection= 0; // Incremental data collection diff --git a/sql/wsrep_mysqld.h b/sql/wsrep_mysqld.h index eb32636d67f..1578464a668 100644 --- a/sql/wsrep_mysqld.h +++ b/sql/wsrep_mysqld.h @@ -101,6 +101,7 @@ extern ulong wsrep_running_rollbacker_threads; extern bool wsrep_new_cluster; extern bool wsrep_gtid_mode; extern my_bool wsrep_strict_ddl; +extern uint wsrep_gtid_domain_id; enum enum_wsrep_reject_types { WSREP_REJECT_NONE, /* nothing rejected */ diff --git a/sql/wsrep_var.cc b/sql/wsrep_var.cc index d894fa6d555..ff02d4b4b0b 100644 --- a/sql/wsrep_var.cc +++ b/sql/wsrep_var.cc @@ -961,3 +961,11 @@ void wsrep_free_status (THD* thd) { thd->wsrep_status_vars.clear(); } + +bool wsrep_gtid_domain_id_update(sys_var* self, THD *thd, enum_var_type) +{ + WSREP_DEBUG("wsrep_gtid_domain_id_update: %llu", + wsrep_gtid_domain_id); + wsrep_gtid_server.domain_id= wsrep_gtid_domain_id; + return false; +} diff --git a/sql/wsrep_var.h b/sql/wsrep_var.h index 810ed4f3dd7..fb23182dbf2 100644 --- a/sql/wsrep_var.h +++ b/sql/wsrep_var.h @@ -105,6 +105,7 @@ extern bool wsrep_debug_update UPDATE_ARGS; extern bool wsrep_gtid_seq_no_check CHECK_ARGS; +extern bool wsrep_gtid_domain_id_update UPDATE_ARGS; #else /* WITH_WSREP */ #define wsrep_provider_init(X) |