diff options
author | Andrei <andrei.elkin@mariadb.com> | 2023-03-23 18:45:34 +0200 |
---|---|---|
committer | Andrei <andrei.elkin@mariadb.com> | 2023-04-25 19:43:04 +0300 |
commit | e22a57da827f11f0ba9903675e4086ab9cf52a0d (patch) | |
tree | c95d47202fa0769201ec221f665beeae5d306212 | |
parent | a72b2c3ffb15541520de96c29ea482f80a57f46f (diff) | |
download | mariadb-git-e22a57da827f11f0ba9903675e4086ab9cf52a0d.tar.gz |
MDEV-30620 Trying to lock uninitialized LOCK_parallel_entry
The error was seen by a number of mtr tests being caused
by overdue initialization of rpl_parallel::LOCK_parallel_entry.
Specifically, SHOW-SLAVE-STATUS might find in
rpl_parallel::workers_idle() a gtid domain hash entry
already inserted whose mutex had not done
mysql_mutex_init().
Fixed with swapping the mutex init and the its entry's stack insertion.
Tested with a generous number of `mtr --repeat` of a few of the reported
to fail tests, incl rpl.parallel_backup.
-rw-r--r-- | sql/rpl_parallel.cc | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sql/rpl_parallel.cc b/sql/rpl_parallel.cc index 7e70e04b857..746c923ba44 100644 --- a/sql/rpl_parallel.cc +++ b/sql/rpl_parallel.cc @@ -2312,14 +2312,16 @@ rpl_parallel::find(uint32 domain_id) e->domain_id= domain_id; e->stop_on_error_sub_id= (uint64)ULONGLONG_MAX; e->pause_sub_id= (uint64)ULONGLONG_MAX; + mysql_mutex_init(key_LOCK_parallel_entry, &e->LOCK_parallel_entry, + MY_MUTEX_INIT_FAST); + mysql_cond_init(key_COND_parallel_entry, &e->COND_parallel_entry, NULL); if (my_hash_insert(&domain_hash, (uchar *)e)) { + mysql_cond_destroy(&e->COND_parallel_entry); + mysql_mutex_destroy(&e->LOCK_parallel_entry); my_free(e); return NULL; } - mysql_mutex_init(key_LOCK_parallel_entry, &e->LOCK_parallel_entry, - MY_MUTEX_INIT_FAST); - mysql_cond_init(key_COND_parallel_entry, &e->COND_parallel_entry, NULL); } else e->force_abort= false; |