mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
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.
This commit is contained in:
parent
a72b2c3ffb
commit
e22a57da82
1 changed files with 7 additions and 5 deletions
|
@ -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;
|
||||
if (my_hash_insert(&domain_hash, (uchar *)e))
|
||||
{
|
||||
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);
|
||||
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;
|
||||
}
|
||||
}
|
||||
else
|
||||
e->force_abort= false;
|
||||
|
|
Loading…
Reference in a new issue